无法弄清楚如何在Haskell 中以下列方式合并两个列表:
INPUT: [1,2,3,4,5] [11,12,13,14]
OUTPUT: [1,11,2,12,3,13,4,14,5]
Run Code Online (Sandbox Code Playgroud) 我有一个有限列表的函数
> kart :: [a] -> [b] -> [(a,b)]
> kart xs ys = [(x,y) | x <- xs, y <- ys]
Run Code Online (Sandbox Code Playgroud)
但如何为无限列表实现它?我听说过Cantor和集合理论......
我也发现了一个类似的功能
> genFromPair (e1, e2) = [x*e1 + y*e2 | x <- [0..], y <- [0..]]
Run Code Online (Sandbox Code Playgroud)
但是我不确定它是否有帮助,因为拥抱只会在没有中断的情况下发出对.
感谢帮助.
我只是在学习Haskell,我想制作一个"shuffle"函数,将两个列表混合在一起,直到一个用完为止.所以,shuffle "abc" "defgh"
会回来"adbecfgh"
.或者shuffle "abc" ""
返回"abc"
.
到目前为止,我有:
shuffle xs ys = concatMap (\(x,y) -> [x,y]) (zip xs ys)
Run Code Online (Sandbox Code Playgroud)
问题是,它只是在列表中填充最短列表的长度,而不包括较长列表的其余部分.所以shuffle "abc" "defgh"
回报"adbecf"
而不是"adbecfgh"
.
任何人都可以帮我找到更好的方法吗?