首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换n在[x=x\x<-[1.n]中

替换n在[x=x\x<-[1.n]中
EN

Stack Overflow用户
提问于 2015-10-16 13:58:26
回答 1查看 113关注 0票数 1
代码语言:javascript
复制
test n = (sum s)*4+2*(n-1)*((l')^2)-2*(n-1)*(l')
    where 
      p =sort $[ m | a<-[1..(n-1)],b<-[1..(n-1)],let m= (b/a), (a^2+b^2< (n^2))]
      l'= length p
      s = (product a) : next a (group p)
        where 
          a = [(n-1),2*(l')+(n-2)] 
          next [x,y] (z:z':zs) = case (null zs) of
            False -> (x')*(y')*l : next [x',y'] (z':zs)
            True -> (x')*(y')*l :[]
            where 
              l  = length z
              x' = x+l
              y' = y-length z'

为什么上面的代码会出现以下错误:

在表达式(b / a)中使用“/”没有(分数Int)的实例 在m:m= (b / a)的方程中 在“($)”的第二个论点中,即 A <- 1 .(n - 1),b <- 1 .(n-1),设m= (b / a),(a ^2+b^2< (n ^2))]‘

但是,当我在代码中手动替换n=3时:

代码语言:javascript
复制
test' = (sum s)*4+2*(3-1)*((l')^2)-2*(3-1)*(l')
    where 
      p = sort $[ m | a<-[1..(3-1)],b<-[1..(3-1)],let m= (b/a), (a^2+b^2< (3^2))]
      l'= length p
      s = (product a) : next a (group p)
        where 
          a = [(3-1),2*(l')+(3-2)] 
          next [x,y] (z:z':zs) = case (null zs) of
            False -> (x')*(y')*l : next [x',y'] (z':zs)
            True -> (x')*(y')*l :[]
            where 
              l  = length z
              x' = x+l
              y' = y-length z'

然后它可以在GHCi中运行;发生了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 14:11:54

当您输入n时,您强迫它使用表达式成为Int。因此,ba变成了Int,这在a/b中就成了问题。

在编写3时,文字多态允许一些表达式使用Int,而有些则允许使用其他Fractional a => a。跨该函数使用的3只是不同的值。

创建一个不同的值,比如nP = fromIntegral n 应该允许您在每个上下文中使用n。,因为nP不应该被任何表达式僵化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33172321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档