我是Haskell的初学者,所以我在使用严格类型的东西方面有些挣扎,只是想知道是否有人可以在我尝试构建的功能上为我提供帮助。基本上,它采用一个列表列表,例如:
[[1,2,3], [7,6,8], [0,3,4]]
并将它们添加到一个列表中,将后面的列表按其位置数进行翻译。因此,在示例列表中进行操作实际上是在执行以下操作:
foldl (zipWith +) [] [[1,2,3],[0,7,6,8],[0,0,0,3,4]]
这是我当前的功能(它会导致类型错误):
addLists :: [[Integer]] -> [Integer]
addLists [[]] = []
addLists [[x]] = [x]
addLists [x:xs] = zipWith (+) [x] ([0]++ (addLists xs))
最佳答案
我想这就是你想要的
import Data.List (transpose)
addLists :: Num a => [[a]] -> [a]
addLists xs = map sum . transpose $ zipWith (\n x -> replicate n 0 ++ x) [0..] xs