在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];;
才能正常工作。
答案 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)
意思是同样的事情。