2014-11-01 152 views
0

我試圖把一個遞歸函數計算列表中的偶數元素的數量,到目前爲止,這是我想出來的,但顯然對於那些在這方面有經驗的人語言就能看到什麼問題和錯誤消息不來,直到後,我輸入一個列表,我不知道它是什麼提到,任何幫助,將不勝感激haskell counting偶數在列表

evenNumCount [] = [] 
evenNumCount (x:xs) 
    | ev == True = 1 + (evenNumCount xs) 
    | otherwise  = evenNumCount xs 
    where ev = even x 
+0

(你可以取代'| ev == True = 1 +(evenNumCount xs)其中ev =偶數只有'|甚至x = 1 + evenNumCount xs') – AndrewC 2014-11-01 12:46:05

+2

你也可以做'evenNumCount = length。甚至過濾「 – alternative 2014-11-01 13:15:49

回答

5

你的基本情況應是:

evenNumCount [] = 0 

如果你看看你的的類型在GCHI的定義,它是

evenNumCount :: (Integral t, Num [a]) => [t] -> [a] 

,當你希望它是

evenNumCount :: (Integral t, Num a) => [t] -> a 
+0

@ Abstract3000 ....或者甚至是」evenNumCount :: [Int] - > Int「。始終提供類型簽名,它可以幫助您將您的代碼與您的期望相匹配。在這種情況下,如果可以將列表視爲數字,那麼'1 +(evenNumCount xs)'行就可以工作,這就是爲什麼'Num [a]'約束在那裏。 – AndrewC 2014-11-01 12:44:16

+0

對不起,我的肥皂箱劫持你的答案,我懶得寫我自己的。通過協議和道歉達成協議。 – AndrewC 2014-11-01 12:47:51

+0

謝謝你的迴應,它比我想象的要簡單得多。我只是幾乎沒有學習這門語言,而且我一直在使用Type簽名並完全理解它們,現在已經閱讀了第4X章並慢慢掌握了它,但我認爲練習是完美的,我非常欣賞這些建議和幫助:) – Abstract3000 2014-11-01 12:50:22