2015-04-02 70 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