F# 在映射时使用以前评估的解决方案(状态)

F# use previous evaluated solution (state) while mapping

我正在评估 F# 中的迭代算法,其中当前时间步需要前一个时间步的解(状态)。在第一次迭代的情况下,初始条件应该是可设置的,即设置为 0.

这类似于:

let answer = List.map (fun x -> x + previousAnswer) 0 someData

我想要的类似于折叠,但之前的解决方案(状态)不是累积的,而是简单的可访问的。 执行此类操作的正确功能方法是什么?

谢谢!

fold即returns所有中间值作为一个新的序列传统上称为scan。事实上,F# 标准库确实为所有基本集合提供了 scan 的实现:

    let answers = List.scan (fun previousAnswer x -> x + previousAnswer) 0 someData

(另请注意,在您的示例中,您翻转了 map 个参数 - 它应该是 0 someData,而不是 someData 0