1
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,但我想要对列表进行更多控制,并且想要一种方法来获取列表中特定元素的总和,而不是整个列表。

我哪里错了?

4

1 回答 1

5

您的sum'功能不正确:

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

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

将其更改为:

sum' a = foldr (+) 0 a

它会起作用。

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

于 2013-05-31T12:04:36.120 回答