Я просто изучаю Haskell, и я хотел бы сделать функцию «перетасовки», которая перемешивает два списка, чередуясь, пока не закончится. Итак, shuffle "abc" "defgh"
вернется "adbecfgh"
. Или shuffle "abc" ""
"abc"
.Смешайте два списка в Haskell
До сих пор у меня есть:
shuffle xs ys = concatMap (\(x,y) -> [x,y]) (zip xs ys)
Проблема заключается в том, что это только перетасовки списков для длины кратчайшего списка и не включая остальную часть длинного списка. Таким образом, shuffle "abc" "defgh"
возвращает "adbecf"
, а не "adbecfgh"
.
Может ли кто-нибудь помочь мне найти лучший подход к этому?
Также [список перемежения списков] (http://stackoverflow.com/questions/14186433/interleave-list-of -lists-in-haskell) похож, но немного более общий. – phadej