无法获取Haskell中列表的总和

无法获取Haskell中列表的总和,haskell,Haskell,这是我获取递归生成列表的总和的代码 我本可以在take num fibs上执行foldr操作,但我希望对列表有更多的控制,并希望有一种方法,可以获取列表中特定元素的总和,而不是整个列表 我哪里出错了?您的“求和”函数不正确: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) sum' :: (Integral a) => [a] -> a sum' [] = 0 sum' [a] = foldr (+) 0 ([a]) main = do p

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

我本可以在take num fibs上执行foldr操作,但我希望对列表有更多的控制,并希望有一种方法,可以获取列表中特定元素的总和,而不是整个列表

我哪里出错了?

您的“求和”函数不正确:

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)
这将只接受1个元素的列表并求和:-

将其更改为:

sum' [a] = foldr (+) 0 ([a])
它会起作用的

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

您的sum'函数不正确:

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)
这将只接受1个元素的列表并求和:-

将其更改为:

sum' [a] = foldr (+) 0 ([a])
它会起作用的


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

这并不能真正解决我的问题。如中所示,我总是得到总数。而不是一个特定位置的两个元素之和。“希克,我明白了。你能说得更具体些吗?你所说的某一职位的两个要素是什么意思?对于斐波那契序列,两个连续元素的和由下一个表示,因此fibs!!5将是元素3和4的总和。因此,当我做了一个数字小谎!!num在这里,它会出现一个错误,因为初始的数字列表总是大于递归计算的列表。你想从take num fibs中得到什么!!num?假设我把num指定为200,那么就用num fibs!!num应该给我第199个和第198个元素的和。否则我完全理解错了。这并不能真正解决我的目的。如中所示,我总是得到总数。而不是一个特定位置的两个元素之和。“希克,我明白了。你能说得更具体些吗?你所说的某一职位的两个要素是什么意思?对于斐波那契序列,两个连续元素的和由下一个表示,因此fibs!!5将是元素3和4的总和。因此,当我做了一个数字小谎!!num在这里,它会出现一个错误,因为初始的数字列表总是大于递归计算的列表。你想从take num fibs中得到什么!!num?假设我把num指定为200,那么就用num fibs!!num应该给我第199个和第198个元素的和。否则我完全理解错了。