2014-02-22 36 views
3

我想将一个函数应用于同构元组的两个成员,导致另一个元组。从我previous question继我限定的操作,似乎是有道理的对我说:是否有一个函数将函数应用于元组的每个成员?

let (||>>) (a,b) f = f a, f b 

但是,我又觉得这可能是一个常见的情况,但在标准库中找不到它。它存在吗?

+1

如果你真的知道你在做什么:http://www.nut-cracker.com.ar/index.php/functions-for-n-tuples –

+0

现在感动[这里](http://nut-cracker.azurewebsites.net/functions-for-n-tuples) – Gustavo

回答

5

我不认为有任何的标准库函数做到这一点。

我个人的偏好是避免过多的运营商定制(它们使代码更短,但他们使其难以对谁没见过的定义之前人们阅读)。应用功能的元组的两个元素在逻辑上是接近上列出了地图操作(适用的功能列表中的所有元素),所以我可能会定义Tuple2.map

module Tuple2 = 
    let map f (a, b) = (f a, f b) 

然后你可以使用功能很好地与流水线:

let nums = (1, 2) 
nums |> Tuple2.map (fun x -> x + 1) 
+0

我喜欢你的推理,我会带你的推荐endation。我能问你为什么定义一个新的模块Tuple2而不是扩展现有的Tuple? – AlexFoxGill

+0

啊... 2指的是元组的大小? – AlexFoxGill

+0

@AlexG是:-)名称“Tuple2”指的是元组的大小。但如果你只需要两元元组,那么'Tuple.map'或'Pair.map'会更好。 –

相关问题