这个折叠到底在做什么?

时间:2015-07-16 15:06:52

标签: syntax f# fold

作为我的问题(F# Threading Changing State Through Unfold)的一部分,我偶然发现使用Seq.fold函数的解决方案,但语法对我来说很奇怪。

本质:

items
|> Seq.fold (fun (someState) theItem -> ....) someInitialState

我从功能上得到了它的功能,但我并不完全确定 它在做什么......

在括号中单独指定SomeState创建一个someInitialState然后部分应用到的curry函数?

我不认为这是折叠函数特有的东西,可能只是利用了我没有看到的功能原理。

1 个答案:

答案 0 :(得分:3)

括号什么都不做。这就是文件夹的样子。

如果你看一下折叠的类型:

Seq.fold : ('State -> 'T -> 'State) -> 'State -> seq<'T> -> 'State

文件夹功能属于'State -> 'T -> 'State类型。这意味着它需要一个状态和一个元素,并返回一个新状态。事实上它已经过去了,但这在这里并不重要。

fold使用该函数的方式是采用初始状态,将文件夹应用于初始状态和第一个元素,然后将文件夹应用于结果状态和第二个元素,依此类推。