sumAllDigits :: [ Int ] -> Int
sumAllDigits (x:xs)
|(x:xs) == [] = 0
|x >= 10 = sumDigits x + sumAllDigits xs
|x< 10 = x + sumAllDigits xs
报告:
*递归>总和所有数字 [22,33] 异常:递归.hs:(76,1)-(79,34):函数 sumAllDigits 中的非穷举模式
我相信
以下更改将为您纠正此问题。我更喜欢将空列表情况作为自己的实现来匹配。只是感觉更明确。然后,由于如果小于x
,它将通过>=
下降,否则将涵盖这些情况。
sumAllDigits :: [ Int ] -> Int
sumAllDigits [] = 0
sumAllDigits (x:xs)
| x >= 10 = sumDigits x + sumAllDigits xs
| otherwise= x + sumAllDigits xs