将多个列表的内容添加在一起
我正在学习 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]]
我把它作为一个练习来组合transpose,map并sum获得每列的总和。