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,但是我希望能够更好地控制列表,并想要一种方法,我可以将列表中特定元素的总和而不是整个列表.
我哪里错了?
你的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.