我正在努力理解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函数?
是的:
map (\(x,y) -> (f1 x, f2 y)) list
在lambda exssion中箭头的左侧,我们有一个(x,y)
匹配列表中元组的模式.在右侧,我们编写(f1 x, f2 y)
以创建一个新的tupel,其中第一个值f1
应用于x
第二个值并f2
应用第二个值y
.
另一种解决方案就是
map (f1 *** f2) list
这是使用Control.Arrow
提供(***)
操作员的事实,这说明了这一点
f *** g = \(x, y) -> (f x, g y)