1

给定一个带有两个参数的函数:

let f (a:int) (b:int) : string = sprintf "%d %d" a b

还有一个元组列表:

let myList = [(1,2) ; (3,3)]

如何(||>)使用地图部分应用元组运算符?

myList |> List.map ((||>) f)            //doesn't work
myList |> List.map (fun x -> (||>) x f) //boring

看来我需要扭转需要的论点||>

4

2 回答 2

10
myList |> List.map ((<||) f)
于 2012-07-20T15:35:01.370 回答
6

好吧,(<||)像@desco 那样使用是最短的答案。您可以使用以下方式轻松编写无点样式uncurry

let inline uncurry f (x, y) = f x y
myList |> List.map (uncurry f)

甚至更奇怪的是内置函数:

myList |> List.map ((|>) f << (||>))

证明:

(|>) f << (||>)
<=> fun x -> ((|>) f << (||>)) x
<=> fun x -> ((|>) f) ((||>) x)
<=> fun x -> (|>) f ((||>) x)
<=> fun x -> f |> ((||>) x)
<=> fun x -> (||>) x f
于 2012-07-20T15:34:12.630 回答