首页 > 解决方案 > Haskell - 一种无需折叠即可生成新列表(如折叠)的更好方法

问题描述

如果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当前索引在哪里

并将其附加到新列表中。


有没有更好的方法来做到这一点?

标签: haskell

解决方案


如果您查看PreludeList,您会注意到 functionscanl旁边foldl(和scanl1counter foldl1)。这也许是你需要的吗?

Prelude> scanl1 (+) [3, 5, 1, 4, 7, 8, 10]
[3,8,9,13,20,28,38]

尽管它不会从正整数中生成斐波那契。


推荐阅读