fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
sum' :: (Integral a) => [a] -> a
sum' [] = 0
sum' [a] = foldr (+) 0 ([a])
main = do putStrLn "Enter a number:"
num <- readLn
sum' (take num fibs)
这是我的代码,用于获取递归生成列表的总和。
我本可以在foldr
完成take num fibs
操作,但是我希望能够更好地控制列表并想要一种方法来获取列表中特定元素的总和而不是整个名单。
我哪里错了?
答案 0 :(得分:5)
您的sum'
功能不正确:
sum' [a] = foldr (+) 0 ([a])
这只接受并总结1个元素的列表。 : - )
将其更改为:
sum' a = foldr (+) 0 a
它会起作用。
您还可以删除多余的sum' [] = 0
行,并将类型扩展为sum' :: (Num a) => [a] -> a
。