Haskell:列表和折叠

use*_*032 2 haskell list fold

我有一系列数字:0,1,3,6,10,15,......基本上,你加1,然后你加2,然后加3,等等.

我必须创建一个函数,在列表中返回给定数字n的这一系列数字.我想用foldl.

所以,系列5应该返回[0,1,3,6,10,15]

这是我到目前为止:

eachElem n = foldl (+) 0 [0..n]

series n = [x | x <- [(eachElem 0), (eachElem 1)..(eachElem n)]]
Run Code Online (Sandbox Code Playgroud)

基本上,我认为列表中的每个元素都是一个foldl操作,因此我创建了一个单独的辅助函数(eachElem)来完成此任务.

但是,它返回的列表比我想要的要大得多.

例如.系列3 => [0,1,2,3,4,5,6]什么时候应该真的返回[0,1,3,6]

任何想法为什么会这样?

ami*_*dfv 7

scanl 更适合你正在做的事情.

它的类型是scanl :: (a -> b -> a) -> a -> [b] -> [a]- 它的类型签名与foldls 相同,但是它返回一个增量值列表,而不仅仅是最终结果.

我会把剩下的作为锻炼给你,因为这看起来像是功课.祝好运!