我刚刚学习Haskell,我想创建一个“混洗”函数,将两个列表混合在一起,交替出现,直到一个列表用完。因此,shuffle "abc" "defgh"
将返回"adbecfgh"
。或者shuffle "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 2015-02-11 07:42:11