gpt4 book ai didi

f# - 令人困惑的匿名函数构造

转载 作者:行者123 更新时间:2023-12-04 23:16:22 27 4
gpt4 key购买 nike

我正在阅读 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])

我不明白的部分是这样的: ((>=) first) .这究竟是什么?相比之下,这是来自 MSDN documentation 的一个例子。为 List.partition :
let list1 = [ 1 .. 10 ]
let listEven, listOdd = List.partition (fun elem -> elem % 2 = 0) list1
printfn "Evens: %A\nOdds: %A" listEven listOdd

第一个参数(这是正确的术语吗?)到 List.partition显然是一个匿名函数。我将有问题的行改写为:
let smaller,larger = List.partition (fun e -> first >= e) rest 

它的工作原理与上面的示例相同。我只是不明白这个结构如何完成同样的事情: ((>=) first)
http://fsharpforfunandprofit.com/posts/fvsc-quicksort/

最佳答案

这与中缀表示法与前缀表示法大致相同
运算符也是函数并遵循相同的规则(即它们可以部分应用)

所以这里(>=) first是运算符 >= 和 first已经作为“第一个”操作数应用,并返回一个等待运算符的第二个操作数的函数,正如您在重写该行时所注意到的那样。

关于f# - 令人困惑的匿名函数构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com