无法在Haskell中获取列表的总和

时间:2013-05-31 11:52:27

标签: haskell

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操作,但是我希望能够更好地控制列表并想要一种方法来获取列表中特定元素的总和而不是整个名单。

我哪里错了?

1 个答案:

答案 0 :(得分:5)

您的sum'功能不正确:

sum' [a] = foldr (+) 0 ([a])

这只接受并总结1个元素的列表。 : - )

将其更改为:

sum' a = foldr (+) 0 a

它会起作用。

您还可以删除多余的sum' [] = 0行,并将类型扩展为sum' :: (Num a) => [a] -> a