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

标签 list f# mapping iteration

我正在评估 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/

相关文章:

python - 如何使 '?' 等于一个数字,所以当我浏览列表时。它将把它算作零。 (Python)

ios - 如何在 RestKit 中映射 JSON 数组

Python 未写入 MySQL(类型错误 : format requires a mapping)

io - 使用 F# 读取 MNIST 数据集

f# - 函数 [x] -> ... 是如何工作的

symfony - 如何将自定义属性添加到 Symfony Doctrine YAML 映射文件

python - 如何将此项目 append 到同一列表中,而不是每次循环时创建一个新列表?

python - 生成间隔之间的日期时间列表

python - 将连续的数字组合成范围元组

f# - 如何将大型可区分联合树转换为可读形式?