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 |