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

在解决一些基本的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

我是haskell的新手,正在尝试一些练习。在尝试加载以下代码时,我遇到了一个绑定错误HowmanyWoeQual函数。有人能告诉我我犯了什么错误吗

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类型定义中的输入错误:您使用了“howmayoftwoqual”而不是“howmanyoftwoequal”
  • 要在布尔运算中使用howmanyoftwoequal&&和| |,其类型应为Bool:

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

  • 您的代码中有几个问题:

  • howmanyoftwoequal类型定义中的输入错误:您使用了“howmayoftwoqual”而不是“howmanyoftwoequal”
  • 要在布尔运算中使用howmanyoftwoequal&&和| |,其类型应为Bool:

    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请接受这个答案-我注意到你到目前为止没有接受任何问题,请阅读:太好了