我最近一直在学习F#(我的背景是C#),正在阅读站点http://fsharpforfunandprofit.com,这对我很有帮助。

我要到http://fsharpforfunandprofit.com/posts/defining-functions/,这是关于组合器的部分。我了解它们(除了红them组合器还是Sage鸟螺钉!)。 Scott Wlaschin给出的定义(在F#中)为:

let K x y = x


我无法理解这将是有用的任何情况。起初,我认为它可以用作链运算符,以便您可以将值传递给函数,然后取回原始值。我之前已经写过这样的运算符,但是您可以看到它是不一样的:

let (>|) x f = f x; x


如果我们部分地应用K组合器(值为5),那么我们将获得一个忽略其参数的函数,而是返回5。这同样没有用。

(K 5) = fun y -> 5


谁能给我一个简单的例子说明如何使用它?

最佳答案

这是一个非常简单的示例:

假设我有一个结构,例如一个可以映射函数的列表。

let K x y = x

let lst = [3;5;13;2]


我可以这样映射数学函数:

let plus5  = lst |> List.map ((+)5) // instead of writing List.map (fun x -> 5 + x)
// val plus5 : int list = [8; 10; 18; 7]

let times3 = lst |> List.map ((*)3) // instead of writing List.map (fun x -> 3 * x)
// val times3 : int list = [9; 15; 39; 6]


如果我想映射一个常数函数怎么办?

let tens = lst |> List.map (K 10) // instead of writing List.map (fun x -> 10)
// val tens : int list = [10; 10; 10; 10]


鉴于在FP中通常将函数作为参数传递,K组合器使您可以通过几次击键来指定常量函数。

关于f# - (茶est)K组合器:为什么有用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26139819/

10-12 04:08