Как я могу объединить два списка, используя технику ниже - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно взять два списка и объединить их, составив пары из 1-го элемента каждого списка, затем из 2-го и так далее ...

Ввод: [1,2,3] [4,5,6] Ввод: [(1,4),(2,5),(3,6)]

1 Ответ

4 голосов
/ 17 октября 2019

Это называется "молнией". Вы можете использовать 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) = …

с … частями, которые необходимо заполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...