令人困惑的匿名函数构造

Tim*_*ker 4 f#

我正在阅读F#教程,并遇到了一个我不理解的语法示例.我正在阅读的页面链接位于底部.这是该页面的示例:

let rec quicksort2 = function
   | [] -> []                         
   | first::rest -> 
        let smaller,larger = List.partition ((>=) first) rest 
        List.concat [quicksort2 smaller; [first]; quicksort2 larger]

// test code        
printfn "%A" (quicksort2 [1;5;23;18;9;1;3])
Run Code Online (Sandbox Code Playgroud)

我不明白的部分是:((>=) first).究竟是什么?用于对比度,这是从一个示例MSDN文档List.partition:

let list1 = [ 1 .. 10 ]
let listEven, listOdd = List.partition (fun elem -> elem % 2 = 0) list1
printfn "Evens: %A\nOdds: %A" listEven listOdd
Run Code Online (Sandbox Code Playgroud)

第一个参数(这是正确的术语吗?)List.partition显然是一个匿名函数.我重写了这个问题:

let smaller,larger = List.partition (fun e -> first >= e) rest 
Run Code Online (Sandbox Code Playgroud)

它的工作原理与上面的例子相同.我只是不明白这个结构是如何完成同样的事情的:((>=) first)

http://fsharpforfunandprofit.com/posts/fvsc-quicksort/

Seh*_*cht 5

这与中缀符号与前缀符号大致相同,
操作符也是函数,并遵循相同的规则(即,它们可以部分应用)

所以这里(>=) first是运算符> = first已经应用为"第一"操作数,并返回一个函数,等待重写该行时注意到的运算符的第二个操作数.