F#将运算符视为函数

时间:2011-07-26 21:45:24

标签: f# functional-programming

在F#中,有没有办法将运算符视为函数?在上下文中,我想部分应用运算符(包括中缀和前缀),但编译器似乎只是部分应用函数。

实施例: 而不是能够写List.map (2 **) [0..7];;我必须定义我自己的函数pow x y(然后是另一个函数let swap f x y = f y x;;,因为编译器不允许我部分应用|>,与List.map (|> pow 2) [0..7];;中一样。)最后,我的代码需要List.map (swap pow 2) [0..7];;才能正常工作。

2 个答案:

答案 0 :(得分:5)

我会这样做:

[0..7] |> List.map (fun n -> pown n 2)

或者,如果2是基数:

[0..7] |> List.map (pown 2)

这也有效:

[0.0..7.0] |> List.map (( ** ) 2.0)

答案 1 :(得分:3)

哈斯克尔没有'运营商部门';使用lambda来部分应用运算符,例如

(fun x -> x - 10)

如果你将中缀运算符作为前缀包含在parens中,你可以部分应用第一个参数,例如

(fun x -> 10.0 / x)

((/) 10.0)

意思是同样的事情。