如何在Haskell中匹配列表元素1对1

时间:2015-04-02 22:49:32

标签: list haskell matching

我有两个相同数量的元素列表,例如:[1,2,3]['a','b','c']

我想以[(1,'a')(2,'b')(3,'c')]格式合并它们。可能吗?如果是这样,怎么办?我找不到办法。

2 个答案:

答案 0 :(得分:5)

您正在寻找zip功能:

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

为了将来参考,您可以使用hoogle帮助根据类型签名查找功能。

答案 1 :(得分: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

*使用-XParallelListComp致电GHCi或将{-# OPTIONS_GHC -XParallelListComp #-}添加到您的文件中。