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

Hic*_*ick 1 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)
Run Code Online (Sandbox Code Playgroud)

这是我的代码,以获取递归生成列表的总和.

我本可以完成foldr操作take num fibs,但是我希望能够更好地控制列表,并想要一种方法,我可以将列表中特定元素的总和而不是整个列表.

我哪里错了?

Dee*_*tan 5

你的sum'功能不正确:

sum' [a] = foldr (+) 0 ([a])
Run Code Online (Sandbox Code Playgroud)

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

将其更改为:

sum' a = foldr (+) 0 a
Run Code Online (Sandbox Code Playgroud)

它会奏效.

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