如果为foldl
提供了一个函数(+)
和一个列表[1..10]
,它将生成一个最终数字。
我想要的是
[1,2,3,4,5,6,7,8,9,10]
输出将是“三角数”系列。
但给出类似列表
[3, 5, 1, 4, 7, 8, 10]
输出应为
[3, 8, 9, 13, 20, 28, 38]
我这样做的方式是通过使用
生成一个新列表 sum (take x) list
其中x
是当前索引
并将其附加到新列表中。
有更好的方法吗?
答案 0 :(得分:5)
如果您查看PreludeList,您会注意到scanl
旁边的功能foldl
(和scanl1
对foldl1
的计数)。那可能就是您所需要的吗?
Prelude> scanl1 (+) [3, 5, 1, 4, 7, 8, 10]
[3,8,9,13,20,28,38]
尽管它不会产生正整数之外的斐波那契。
答案 1 :(得分:3)
您正在寻找scanl1
函数:
> scanl1 (+) [3,5,1,4,7,8,10]
[3,8,9,13,20,28,38]