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

时间:2010-12-02 21:24:22

标签: haskell functional-programming

我有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)

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

基本上我想要做的是同时沿着2个列表迭代,这是我在Haskell中无法想到的方法,而不是诉诸拉链。

由于

3 个答案:

答案 0 :(得分:7)

使用zipWith。例如:

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

给出:

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

答案 1 :(得分:5)

为什么zip不是一个选项?

或者我应该说,zipWith。

zipWith (\x y -> x:y) xs xxs

答案 2 :(得分:4)

您可以将zip移动到ZipList的{​​{1}}类型:

Control.Applicative