F#将运算符视为函数

Jon*_*ono 3 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];;工作.

Dan*_*iel 5

我会这样做:

[0..7] |> List.map (fun n -> pown n 2)
Run Code Online (Sandbox Code Playgroud)

或者,如果2是基数:

[0..7] |> List.map (pown 2)
Run Code Online (Sandbox Code Playgroud)

这也有效:

[0.0..7.0] |> List.map (( ** ) 2.0)
Run Code Online (Sandbox Code Playgroud)

  • @Jono - 虽然你可以写`((|(>)2.0(**))`作为`List.map`的参数,老实说我认为这是一个非常糟糕的主意.它具有_exactly_与`(fun a - > a**2.0)`相同的字符数,并且需要_much_来解读实际发生的事情.来自丹尼尔的第三个例子非常普遍,所以我认为这很好,但除此之外的任何事情往往都太复杂了.(虽然这只是我个人的偏好,任何人都可以不同意它.) (2认同)