如何在haskell中添加两个列表?

Ale*_*lex 5 haskell

如何添加例如[1,2,3]到[5,4,6]返回[6,6,8]这是我到目前为止所拥有的:

func1 :: [Int]->[Int]->[Int]
func1 x y = [a+b|a<-x,b<-y]
Run Code Online (Sandbox Code Playgroud)

我应该尝试删除我不想要的元素,还是有更简单的方法来做到这一点?

J. *_*son 13

你在找zipWith.特别是func1 x y = zipWith (+) x y.你可以"eta reduce"来删除那些额外的参数:func1 = zipWith (+).这是我能想到的最有效的形式.

您当前的方法不起作用,因为[a+b | a <- x, b <- y]形成两个嵌套循环,一个在xes上,一个在ys上.这是列表推导的本质,它基于Set Builder Notation.读它的一种方法是"从X每一个,从y各自B,给我(a + b)",而我们实际上希望通过运行xy在一起.

  • 还有一个名为`ParallelListComp`(并行列表推导)的语言扩展,它允许你写几乎在问题中给出的`func1`:`func1 xy = [a + b | a < - x | b < - y]` (4认同)