我正在努力理解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函数?
答案 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
。