24 lines
486 B
Scheme
24 lines
486 B
Scheme
(define (dec x)
|
|
(- x 1))
|
|
|
|
(define (halve x)
|
|
(/ x 2))
|
|
|
|
(define (row*col row col)
|
|
(apply + (map * row col)))
|
|
|
|
(define (matrix-multiply m1 m2)
|
|
(map
|
|
(lambda (row)
|
|
(apply map (lambda col (row*col row col))
|
|
m2))
|
|
m1))
|
|
|
|
(define (matrix-exp mat exp)
|
|
(cond ((= exp 1) mat)
|
|
((even? exp) (square-matrix (matrix-exp mat (halve exp))))
|
|
(else (matrix-multiply mat (matrix-exp mat (dec exp))))))
|
|
|
|
(define (square-matrix mat)
|
|
(matrix-multiply mat mat))
|