在haskell中同时迭代2个列表(不使用zip)

dev*_*ium 1 haskell functional-programming

我有2个清单:

[[1,2],[4,5]]
Run Code Online (Sandbox Code Playgroud)

[0, 3]
Run Code Online (Sandbox Code Playgroud)

而且我想把它变成

[[0,1,2],[3,4,5]]
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个功能:

myFun xxs xs = map (\x -> (fst x):(snd x)) (zip xs xxs)
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但我仍然想知道是否有更好的方法可以在不使用拉链的情况下实现这一目标.有没有?

基本上我想要做的就是同时沿着2个列表迭代,这是我无法想到在Haskell中不用求助于拉链的方法.

谢谢

Yac*_*oby 7

使用zipWith.例如:

zipWith (:) [0,3] [[1,2],[4,5]]
Run Code Online (Sandbox Code Playgroud)

得到:

[[0,1,2],[3,4,5]]
Run Code Online (Sandbox Code Playgroud)


Ano*_*on. 5

为什么拉链不是一个选项?

或者我应该说,zipWith.

zipWith (\x y -> x:y) xs xxs
Run Code Online (Sandbox Code Playgroud)

  • 你也可以用并行列表理解来做到这一点:`[a + b | a < - [1,2,3] | b < - [4,5,6]]`,我认为它仍然是非标准扩展,但GHC支持-XParallelListComp.那就是说,`zipWith(:)`是正确的答案. (2认同)