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



我正在学习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组合起来以获得每列的总和作为练习。