2

如何在同一位置对列表中的元素求和?例如:

[[2,3,4],[5,6,7],[8,9,10]]=[15,18,21]

谢谢

4

3 回答 3

2

您可以转置列表,并对结果中的每个列表求和:

ghci> import Data.List (transpose)
ghci> map sum $ transpose [[2,3,4],[5,6,7],[8,9,10]]
[15,18,21]

与其他解决方案不同,这适用于长度不均匀的列表。

于 2012-12-06T10:40:20.050 回答
2

这是 GHCi 中的一个示例:

λ> let xs = [[2,3,4],[5,6,7],[8,9,10]]
λ> foldr1 (zipWith (+)) xs
[15,18,21]
于 2012-12-06T10:42:13.420 回答
2

尝试:

sumIn :: Num a => [[a]] -> [a]
sumIn = foldl (zipWith (+)) (repeat 0)

请注意,如果参数是一个空列表,则结果是一个无限的零列表。因此,您可能希望单独处理这种情况,例如

sumIn :: Num a => [[a]] -> [a]
sumIn [] = []
sumIn xs = foldl (zipWith (+)) (repeat 0) xs
于 2012-12-06T10:39:01.973 回答