2014-12-30 80 views
0
sumAllDigits :: [ Int ] -> Int 
sumAllDigits (x:xs) 
    |(x:xs) == [] = 0 
    |x >= 10 = sumDigits x + sumAllDigits xs 
    |x< 10 = x + sumAllDigits xs 

REPORT:
*遞歸> sumAllDigits [22,33] ***異常:Recursion.hs:(76,1) - (79,34):非窮盡在函數sumAllDigits非窮盡上的Haskell遞歸

+8

'x:xs'如何能等於'[]'? (提示:以同樣的方式,1可以等於0.) – leftaroundabout

回答

1

我相信以下更改將爲您糾正這種模式。我更願意將它自己的實現與空白列表進行匹配。只是感覺對我更加明確。然後,因爲x將通過>=下降,如果它小於,否則將覆蓋這些情況。

sumAllDigits :: [ Int ] -> Int 
sumAllDigits [] = 0 
sumAllDigits (x:xs) 
    | x >= 10 = sumDigits x + sumAllDigits xs 
    | otherwise= x + sumAllDigits xs 
+4

看起來它可能會修復它,但如果你能解釋什麼是錯誤的以及如何解決這個問題,你的答案會更有用。 – icktoofay

+0

編輯這樣做。對於那個很抱歉。在移動設備上,如果發生應用崩潰或連接丟失,請選擇首先發布有用信息。 :) –

+2

「我更喜歡使空列表案例它自己的實現匹配」 - 這確實是_in general_好建議,但在這裏你可以更強烈地陳述它:如果'x:xs'是唯一的子句,函數_can絕不匹配空列表! – leftaroundabout