簡體   English   中英

Haskell將2個lambda表達式應用於元組列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM