我是haskell的新手并尝试了一些练习。在尝试加载下面的代码时,我得到了一个绑定错误howmanytwoequalfunction.Can任何人请告诉我我做了什么错误。
howmayoftwoequal :: Int->Int->Int
howmanyoftwoequal m n
|m==n =1
|otherwise =0
howmanyequal::Int->Int->Int->Int
howmanyequal m n o
| howmanyoftwoequal m n && howmanyoftwoequal n o =3
| howmanyoftwoequal m n || howmanyoftwoequal n o =2
|otherwise =1
答案 0 :(得分:4)
您的代码中有几个问题:
在布尔运算中使用howmanyoftwoequal&&和||它的类型应该是Bool:
howmanyoftwoequal :: Int->Int->Bool
howmanyoftwoequal m n = m==n
答案 1 :(得分:1)
您对howManyEqual
的定义错过了m == o
但m == n || n == o
不成立的情况,这似乎也应该是返回2
的有效案例。
如果您尝试返回m
,n
和o
之间最大等价类的大小,可以按如下方式实现:
largestEquivSize :: [Int] -> Int
largestEquivSize = maximum . map length . group . sort
howManyEqual :: Int -> Int -> Int -> Int
howManyEqual m n o = largestEquivSize [m, n, o]
额外的好处是largestEquivSize
更加通用(实际上它的类型在这里受到不必要的限制,可能是Ord a => [a] -> Int
)。