Haskell将2个lambda表达式应用于元组列表

时间:2013-12-01 08:45:15

标签: haskell dictionary lambda

我正在努力理解Haskell中的lambda表达式。

问题在于:

我有一个元组列表[(a,b),(c,d),(e,f)...](可以是任意长度)

我想将两个函数f1和f2应用于列表中的每个元组,但是这样的方式是f1应用于第一个元素,f2应用于每个元组的第二个元素。

例如,如果我有[(a,b),(c,d)],我想应用f1和f2来结束这样的事情:[((f1(a),f2(b)),(f1(c),f2(d))]

我想我可以使用map和lambda表达式,但最终会出现类型错误。

是否有可能做我正在尝试使用lambda表达式和map函数?

2 个答案:

答案 0 :(得分:7)

另一种解决方案是

map (f1 *** f2) list

这是使用Control.Arrow提供(***)运算符的事实,该运算符表示

f *** g = \(x, y) -> (f x, g y)

答案 1 :(得分:5)

是的,它是:

map (\(x,y) -> (f1 x, f2 y)) list

在lambda探险中箭头的左侧, 我们使用模式(x,y)来匹配列表中的元组。 在右侧,我们写(f1 x, f2 y)来创建一个新的tupel, 其中第一个值f1应用于x,第二个值f2应用于y