这就是我在Haskell中添加矩阵的方法
> add :: (Num a) => [[a]] -> [[a]] -> [[a]]
> add [] [] = []
> add (x:xs) (y:ys) = zipWith (+) x y : add xs ys
加[[1,2],[3,4]] [[5,6],[7,8]]给我[[6,8],[10,12]]
但是,我正在尝试使用一行代替
> add :: (Num a) => [[a]] -> [[a]] -> [[a]]
> add = map ((zipWith (+))
为什么地图功能不起作用?
这个map函数在这里不起作用,因为你在两个列表而不是一个列表上进行迭代.要并行迭代两个列表zipWith,就像使用内循环一样.
Prelude> let add = zipWith (zipWith (+))
Prelude> add [[1, 2], [3, 4]] [[5, 6], [7, 8]]
[[6,8],[10,12]]
Run Code Online (Sandbox Code Playgroud)