2015-11-07 46 views
0

我是新來的哈斯克爾和嘗試一些exercise.While試圖加載下面的代碼我得到一個綁定錯誤howmanytwoequal函數。可以任何人請告訴我,我有什麼錯誤完成。試圖學習,同時解決一些基本的哈斯克爾問題

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 
+1

由於Haskell是對空白區分敏感的,請編輯您的問題以顯示您的代碼所具有的縮進。 –

+0

更重要的是,Haskell甚至是換行/分號敏感! –

回答

4

你在你的代碼的幾個問題:

  1. 錯字在howmanyoftwoequal類型定義:你有 'howmayoftwoequal' 而不是 'howmanyoftwoequal'
  2. 要在布爾運算使用howmanyoftwoequal & &和||它的類型應該是布爾:

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

謝謝。他現在的工作 – user3274335

+2

另外,當然,你可以用「==」來代替howmanyoftwoequal。順便標準的Haskell風格是使用camelCase:howManyOfTwoEqual –

+0

@ user3274335請接受這個答案,然後 - 我注意到你迄今沒有接受你的任何問題,所以請閱讀:https://stackoverflow.com/help/someone-answers – Carsten

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