29 lines
841 B
Plaintext
29 lines
841 B
Plaintext
; long version based on recursive cycles
|
|
(define (matrix-multiply A B)
|
|
(define m (length A))
|
|
(define n (length (car A)))
|
|
(assert (eq? (length B) n) ===> #true)
|
|
(define q (length (car B)))
|
|
(define (at m x y)
|
|
(lref (lref m x) y))
|
|
|
|
|
|
(let mloop ((i (- m 1)) (rows #null))
|
|
(if (< i 0)
|
|
rows
|
|
(mloop
|
|
(- i 1)
|
|
(cons
|
|
(let rloop ((j (- q 1)) (r #null))
|
|
(if (< j 0)
|
|
r
|
|
(rloop
|
|
(- j 1)
|
|
(cons
|
|
(let loop ((k 0) (c 0))
|
|
(if (eq? k n)
|
|
c
|
|
(loop (+ k 1) (+ c (* (at A i k) (at B k j))))))
|
|
r))))
|
|
rows)))))
|