2015-04-02 78 views
0

我有2個列表中有相同數量的元素,例如:[1,2,3]['a','b','c']如何匹配Haskell中的列表元素1對1

我想合併他們兩個格式[(1,'a')(2,'b')(3,'c')]。可能嗎?如果是這樣,該怎麼做?我找不到方法。

+0

如果有疑問,Hoogle。 https://www.haskell.org/hoogle/?hoogle=zip+%3A%3A+%5Ba%5D+-%3E+%5Bb%5D+-%3E+%5B%28a%2Cb%29%5D – AJFarmar 2015-04-03 16:05:57

回答

5

您正在尋找的zip功能:

> zip [1, 2, 3] ['a', 'b', 'c'] 

對於未來的參考,您可以使用hoogle幫助找到根據類型的簽名功能。

+0

我試圖解決從[(x,y)| x <-...,y <-....],但你的解決方案更優雅,更簡單。 thnx – Tomahawk 2015-04-03 06:39:29

0

這樣做有三種主要方法。

首先,zip功能:

> zip [1,2,3] "abc" 
[(1,'a'), (2,'b'), (3, 'c)] 

和它的朋友,在zipWith功能:

> zipWith (,) [1,2,3] "abc" 
[(1,'a'), (2,'b'), (3, 'c)] 

最後,隨着ParallelListComp擴展名爲*:

> [(a,b) | a <- [1,2,3] | b <- "abc"] 
[(1,'a'),(2,'b'),(3,'c')] 

如果」重新尋找未來的功能,請使用hoogle,它可以讓您查找類型簽名以及名稱。


如果你真的想,你可以明確地定義它:

zip' :: [a] -> [b] -> [(a,b)] 
zip' []  _  = [] 
zip' _  []  = [] 
zip' (a:as) (b:bs) = (a,b) : zip as bs 

*調用GHCI與-XParallelListComp或添加{-# OPTIONS_GHC -XParallelListComp #-}到您的文件。

+0

thnx |符號適合我 – Tomahawk 2015-04-05 22:51:01