我正在评估 F# 中的迭代算法,其中当前时间步长需要前一个时间步长的解(状态)。在第一次迭代的情况下,初始条件应该是可设置的,即设置为 0。
这类似于:
let answer = List.map (fun x -> x + previousAnswer) 0 someData
我想要的类似于折叠,但以前的解决方案(状态)不是累积的,而是简单可访问的。 执行此类操作的正确功能方式是什么?
谢谢!
最佳答案
将所有中间值作为新序列返回的
fold
传统上称为 scan
。事实上,F# 标准库确实为所有基本集合提供了 scan
实现:
let answers = List.scan (fun previousAnswer x -> x + previousAnswer) 0 someData
(另请注意,在您的示例中,您翻转了 map
参数 - 它应该是 0 someData
,而不是 someData 0
)
关于list - F# 在映射时使用先前评估的解决方案(状态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36959969/