作为我的问题(F# Threading Changing State Through Unfold)的一部分,我偶然发现使用Seq.fold
函数的解决方案,但语法对我来说很奇怪。
本质:
items
|> Seq.fold (fun (someState) theItem -> ....) someInitialState
我从功能上得到了它的功能,但我并不完全确定 它在做什么......
在括号中单独指定SomeState
创建一个someInitialState
然后部分应用到的curry函数?
我不认为这是折叠函数特有的东西,可能只是利用了我没有看到的功能原理。
答案 0 :(得分:3)
括号什么都不做。这就是文件夹的样子。
如果你看一下折叠的类型:
Seq.fold : ('State -> 'T -> 'State) -> 'State -> seq<'T> -> 'State
文件夹功能属于'State -> 'T -> 'State
类型。这意味着它需要一个状态和一个元素,并返回一个新状态。事实上它已经过去了,但这在这里并不重要。
fold
使用该函数的方式是采用初始状态,将文件夹应用于初始状态和第一个元素,然后将文件夹应用于结果状态和第二个元素,依此类推。