将多个列表的内容添加在一起

我正在学习 haskell,我似乎无法弄清楚用另一种语言来说什么是一件容易的事。我的问题:将多个列表的数量加在一起形成一个列表。例子:

addTogether [[1,2,3],[4,5,6],[1,1,1]]

应产生

[6,8,10]

有什么建议吗?

回答

对于数字列表,您可以使用sum :: (Foldable f, Num a) => f a -> a

Prelude> sum [1,4,1]
6
Prelude> sum [2,5,1]
8
Prelude> sum [3,6,1]
10

因此,您可以执行映射来计算每个子列表的总和:

Prelude> map sum [[1,4,1], [2,5,1], [3,6,1]]
[6,8,10]

剩下的唯一事情就是转置列表列表,以便我们将数字重新组合成列表。我们可以利用transpose :: [[a]] -> [[a]]

Prelude> import Data.List(transpose)
Prelude Data.List> transpose [[1,2,3],[4,5,6],[1,1,1]]
[[1,4,1],[2,5,1],[3,6,1]]

我把它作为一个练习来组合transposemapsum获得每列的总和。


以上是将多个列表的内容添加在一起的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>