[英]Haskell Applying 2 lambda expressions to list of tuples
我正在努力理解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 (f1 *** f2) list
這是因為Control.Arrow
提供了(***)
運算符,即
f *** g = \(x, y) -> (f x, g y)
是的:
map (\(x,y) -> (f1 x, f2 y)) list
在lambda表達式中箭頭的左側,我們有(x,y)
來匹配您列表中的元組。 在右側,我們編寫(f1 x, f2 y)
來創建一個新的tupel,其中第一個值為f1
應用於x
,第二個值為f2
應用於y
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.