在解决一些基本的haskell问题的同时努力学习

时间:2015-11-07 07:54:35

标签: haskell

我是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

2 个答案:

答案 0 :(得分:4)

您的代码中有几个问题:

  1. Typo in howmanywowo等级类型定义:你有' howmayoftwoequal'而不是' howmanyoftwoequal'
  2. 在布尔运算中使用howmanyoftwoequal&&和||它的类型应该是Bool:

    howmanyoftwoequal :: Int->Int->Bool
    howmanyoftwoequal m n = m==n
    

答案 1 :(得分:1)

您对howManyEqual的定义错过了m == om == n || n == o不成立的情况,这似乎也应该是返回2的有效案例。

如果您尝试返回mno之间最大等价类的大小,可以按如下方式实现:

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)。