Syntax 这个褶皱到底在做什么?

Syntax 这个褶皱到底在做什么?,syntax,f#,fold,Syntax,F#,Fold,作为我问题()的一部分,我偶然发现了一个使用Seq.fold函数的解决方案,但语法对我来说很奇怪 基本上: items |> Seq.fold (fun (someState) theItem -> ....) someInitialState 我知道它在功能上做什么,但我不完全确定它是如何做的 在括号中单独指定SomeState是否会创建一个当前函数,然后将someInitialState部分应用于该函数 我不认为这是折叠函数特有的东西,可能只是利用了我没有看到的函数原理。括号没

作为我问题()的一部分,我偶然发现了一个使用
Seq.fold
函数的解决方案,但语法对我来说很奇怪

基本上:

items
|> Seq.fold (fun (someState) theItem -> ....) someInitialState
我知道它在功能上做什么,但我不完全确定它是如何做的

在括号中单独指定
SomeState
是否会创建一个当前函数,然后将
someInitialState
部分应用于该函数


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

括号没有任何作用。这就是文件夹的外观

如果您查看折叠的类型:

Seq.fold : ('State -> 'T -> 'State) -> 'State -> seq<'T> -> 'State
Seq.fold:('State->'T->'State)->'State->Seq'State
。这意味着它接受一个状态和一个元素,并返回一个新状态。确实是咖喱,但这在这里并不重要


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

因此,假设没有附加状态的
fun item->……
的折叠是一个重载?或者它只是含蓄地接受单位?我会说这是一种错误的折叠方式;)标准中没有这样的重载,可能是您在内部编写的(在这种情况下,我建议仔细查看)。它可能是一个部分应用的文件夹,但是为了匹配签名,第一个参数应该是累加器,而不是项。我想我真的有点傻了,忘记了折叠实际上是什么,结果把它和其他东西混淆了,忘记fold是state和reduce。@Clint-您可能会想到它与
fold
类似,只是它没有单独的state参数。