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

Ant*_*ni4 2 lambda dictionary haskell

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

kqr*_*kqr 7

另一种解决方案就是

map (f1 *** f2) list
Run Code Online (Sandbox Code Playgroud)

这是使用Control.Arrow提供(***)操作员的事实,这说明了这一点

f *** g = \(x, y) -> (f x, g y)
Run Code Online (Sandbox Code Playgroud)


cha*_*ter 6

是的:

map (\(x,y) -> (f1 x, f2 y)) list
Run Code Online (Sandbox Code Playgroud)

在lambda exssion中箭头的左侧,我们有一个(x,y)匹配列表中元组的模式.在右侧,我们编写(f1 x, f2 y)以创建一个新的tupel,其中第一个值f1应用于x第二个值并f2应用第二个值y.