在解决一些基本的haskell问题的同时努力学习
我是haskell的新手,正在尝试一些练习。在尝试加载以下代码时,我遇到了一个绑定错误HowmanyWoeQual函数。有人能告诉我我犯了什么错误吗在解决一些基本的haskell问题的同时努力学习,haskell,Haskell,我是haskell的新手,正在尝试一些练习。在尝试加载以下代码时,我遇到了一个绑定错误HowmanyWoeQual函数。有人能告诉我我犯了什么错误吗 howmayoftwoequal :: Int->Int->Int howmanyoftwoequal m n |m==n =1 |otherwise =0 howmanyequal::Int->Int->Int->Int howmanyequal m n o | ho
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
您的代码中有几个问题:
howmanyoftwoequal :: Int->Int->Bool
howmanyoftwoequal m n = m==n
您的代码中有几个问题:
howmanyoftwoequal :: Int->Int->Bool
howmanyoftwoequal m n = m==n
您对
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]
还有一个额外的好处是,
largestEquivalSize
更加通用(事实上,它的类型在这里受到了不必要的限制,可以是Ord a=>[a]->Int
)。你对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]
再加上
largestEquivalSize
更加通用(实际上它的类型在这里不必要地受到限制,可以是Ord a=>[a]->Int
)。由于Haskell对空格敏感,请编辑您的问题以显示代码的缩进。更重要的是,Haskell甚至对新行/分号敏感!由于Haskell对空格敏感,请编辑您的问题以显示代码的缩进。更重要的是,Haskell甚至对换行符/分号敏感!当然,您也可以将howmanyoftwoequal替换为“==”。顺便提一下,标准的Haskell样式是使用camelCase:howManyOfTwoEqual@user3274335请接受这个答案-我注意到你到目前为止没有接受任何问题,请阅读:当然,你也可以用“==”替换howmanyoftwoequal。顺便提一下,标准的Haskell样式是使用camelCase:howManyOfTwoEqual@user3274335请接受这个答案-我注意到你到目前为止没有接受任何问题,请阅读:太好了