Matrix multiplication: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Another example)
Line 2,232: Line 2,232:
l = [((i,j), sum [x!(i,k) * y!(k,j) | k <- kr]) | i <- ir, j <- jr]</lang>
l = [((i,j), sum [x!(i,k) * y!(k,j) | k <- kr]) | i <- ir, j <- jr]</lang>
===With List and without transpose===
===With List and without transpose===
<lang Haskell>
multiply:: Num a => [[a]] -> [[a]] -> [[a]]
multiply [] _ = error "left matrix is empty"
multiply _ [] = error "right matrix is empty"
multiply us vs = map (mult [] vs) us
where
mult xs [] _ = xs
mult xs _ [] = xs
mult [] (zs:zss) (y:ys) = mult (map (\v -> v*y) zs) zss ys
mult xs (zs:zss) (y:ys) = mult (zipWith (\u v -> u+v*y) xs zs) zss ys

main = mapM_ print $ multiply [[1, 2],[3, 4]] [[-3, -8, 3],[-2, 1, 4]]
</lang>
{{out}}
<pre>
[-7,-6,11]
[-17,-20,25]
</pre>
<lang Haskell>
<lang Haskell>
foldlZipWith::(a -> b -> c) -> (d -> c -> d) -> d -> [a] -> [b] -> d
foldlZipWith::(a -> b -> c) -> (d -> c -> d) -> d -> [a] -> [b] -> d