haskell - 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
当前索引在哪里
并将其附加到新列表中。
有没有更好的方法来做到这一点?
解决方案
如果您查看PreludeList,您会注意到 functionscanl
旁边foldl
(和scanl1
counter foldl1
)。这也许是你需要的吗?
Prelude> scanl1 (+) [3, 5, 1, 4, 7, 8, 10]
[3,8,9,13,20,28,38]
尽管它不会从正整数中生成斐波那契。
推荐阅读
- ruby-on-rails - 如何安全地更改 rails 项目的目录?
- jquery - 光滑的滑块。将两个滑块同步到一个自定义附加点
- mysql - 创建一个存储过程,将具有相同键的行转换为列
- java - 静态方法按字母升序排序
- java - 使用 Google PLACES Api 搜索查看自动完成建议
- batch-file - 想要编写一个批处理作业来检查计算机是否处于锁定状态(屏幕保护程序即将到来)并执行必要的操作?
- ruby-on-rails - Rails I18n 在 URL 中不包含默认语言环境
- python-sphinx - 有没有一种方法可以在 plt.show() 之后使用 sphinx 显示绘图或在 .. plot:: 之后保持范围
- html - 元素内的子元素不会水平对齐
- oracle - 如何设置连接属性(包括同义词)