如何使用以下技术合并两个列表

时间:2019-10-17 18:29:28

标签: list haskell merge

我需要获取两个列表,并将它们组合成每个列表的第一个元素对,然后是第二个,依此类推...

输入:[1,2,3] [4,5,6] 输出:[(1,4),(2,5),(3,6)]

1 个答案:

答案 0 :(得分:4)

这称为“压缩”。您可以使用zip :: [a] -> [b] -> [(a, b)]。确实,例如:

Prelude> zip [1,2,3] [4,5,6]
[(1,4),(2,5),(3,6)]

您可以通过显式递归来实现自己的zip。如果两个列表之一(或两个列表)为空,则结果为空列表。如果两个列表都是非空的,则应在列表的两个头中产生2元组,然后在两个尾部递归。

因此程序将如下所示:

zip' :: [a] -> [b] -> [(a, b)]
zip' [] _ = …
zip' _ [] = …
zip' (x:xs) (y:ys) = …

使用填写您需要填写的部分。