Haskell - 使用foldr / foldl汇总列表

时间:2013-12-18 21:57:51

标签: list haskell

我正在尝试编写函数来汇总列表列表(类型Integer)。我已经使用map完成了它:

summat :: [[Integer]] -> Integer
summat (x:xs) = sum . map sum $ (x:xs)

但无法弄清楚如何使用foldr / foldl让它发挥作用。我试过像:

summat2 :: [[Integer]] -> Integer
summat2 xs = foldr suma 0 xs
        where suma x _ = ???

但当然它只会产生很多错误。你有什么暗示吗?也许有concat的东西?

1 个答案:

答案 0 :(得分:3)

如果您想避免任何其他函数对集合的多个元素起作用,请尝试使用

foldr ((+) . foldr (+) 0) 0

这只使用(+),foldr和(。)。