我正在尝试编写函数来汇总列表列表(类型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
的东西?
答案 0 :(得分:3)
如果您想避免任何其他函数对集合的多个元素起作用,请尝试使用
foldr ((+) . foldr (+) 0) 0
这只使用(+),foldr和(。)。