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时:
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中运行;发生了什么?
发布于 2015-10-16 14:11:54
当您输入n时,您强迫它使用表达式成为Int。因此,b和a变成了Int,这在a/b中就成了问题。
在编写3时,文字多态允许一些表达式使用Int,而有些则允许使用其他Fractional a => a。跨该函数使用的3只是不同的值。
创建一个不同的值,比如nP = fromIntegral n 应该允许您在每个上下文中使用n。,因为nP不应该被任何表达式僵化。
https://stackoverflow.com/questions/33172321
复制相似问题