给定一个带有两个参数的函数:
let f (a:int) (b:int) : string = sprintf "%d %d" a b
Run Code Online (Sandbox Code Playgroud)
以及元组列表:
let myList = [(1,2) ; (3,3)]
Run Code Online (Sandbox Code Playgroud)
如何(||>)使用地图部分应用元组运算符?
myList |> List.map ((||>) f) //doesn't work
myList |> List.map (fun x -> (||>) x f) //boring
Run Code Online (Sandbox Code Playgroud)
似乎我需要反转需要的论据||>.
好吧,使用(<||)@desco做的是最短的答案.您可以使用以下方法轻松编写无点样式uncurry:
let inline uncurry f (x, y) = f x y
myList |> List.map (uncurry f)
Run Code Online (Sandbox Code Playgroud)
或者内置函数更奇怪:
myList |> List.map ((|>) f << (||>))
Run Code Online (Sandbox Code Playgroud)
证明:
(|>) f << (||>)
<=> fun x -> ((|>) f << (||>)) x
<=> fun x -> ((|>) f) ((||>) x)
<=> fun x -> (|>) f ((||>) x)
<=> fun x -> f |> ((||>) x)
<=> fun x -> (||>) x f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |