这就是我在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 (+))
为什么地图功能不起作用?
答案 0 :(得分:8)
map
函数在此处不起作用,因为您正在迭代两个列表而不是一个。要并行迭代两个列表,可以使用zipWith
,就像您已经为内循环做的那样。
Prelude> let add = zipWith (zipWith (+))
Prelude> add [[1, 2], [3, 4]] [[5, 6], [7, 8]]
[[6,8],[10,12]]
答案 1 :(得分:6)
map
会收到一个列表:您正试图将其两个。
尝试类似:
add = zipWith (zipWith (+))