我需要获取两个列表,并将它们组合成每个列表的第一个元素对,然后是第二个,依此类推...
输入:[1,2,3] [4,5,6]
输出:[(1,4),(2,5),(3,6)]
答案 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) = …
使用…
填写您需要填写的部分。