Итерация по 2 спискам одновременно в haskell (без использования zip) - PullRequest
1 голос
/ 03 декабря 2010

У меня есть 2 списка:

[[1,2],[4,5]]

и

[0, 3]

и я бы хотел превратить его в

[[0,1,2],[3,4,5]]

Я создал функцию, которая делает именно это:

myFun xxs xs = map (\x -> (fst x):(snd x)) (zip xs xxs)

и это работает. Но я все еще задаюсь вопросом, может ли существовать лучший способ сделать это без использования почтового индекса. Есть ли?

По сути, я хочу выполнить итерацию по двум спискам одновременно, и я не могу придумать, как это сделать в Haskell, не прибегая к zip.

Спасибо

Ответы [ 3 ]

7 голосов
/ 03 декабря 2010

Используйте zipWith . Например:

zipWith (:) [0,3] [[1,2],[4,5]]

Дает:

[[0,1,2],[3,4,5]]
5 голосов
/ 03 декабря 2010

Почему почтовый индекс не вариант?

Или я должен сказать, zipWith.

zipWith (\x y -> x:y) xs xxs
4 голосов
/ 03 декабря 2010

Вы можете переместить почтовый индекс в тип с помощью ZipList из Control.Applicative:

myFun xxs xs = getZipList $ (:) <$> ZipList xs <*> ZipList xxs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...