(defun m* (a b) (transpose (apply #'mapcar* #'(lambda (&rest l) (mapcar* #'(lambda (x) (v. x l)) a) ) b)) ) (defun v. (a b) (apply #'+ (mapcar* #'* a b)))v. は次のようにリストで表現されたベクトルの内積を求める.
> (v. '(1 2) '(1 2)) 5 > (v. '(1 2 3) '(1 2 3)) 14行列の計算を行ってみると,
> (setq a '((1 2) (3 4))) ((1 2) (3 4)) > (transpose a) ((1 3) (2 4)) > (m* a (transpose a)) ((5 11) (11 25)) > (m* (transpose a) a) ((10 14) (14 20))となります.この定義は,行列の大きさに依存しない.
> (setq b '((1 2 3) (4 5 6) (7 8 9))) ((1 2 3) (4 5 6) (7 8 9)) > (transpose b) ((1 4 7) (2 5 8) (3 6 9)) > (m* b b) ((30 36 42) (66 81 96) (102 126 150)) > (m* b (transpose b)) ((14 32 50) (32 77 122) (50 122 194)) > (m* (transpose b) b) ((66 78 90) (78 93 108) (90 108 126)) > (setq a '((1 2 3) (4 5 6))) ((1 2 3) (4 5 6)) > (setq b (transpose a)) ((1 4) (2 5) (3 6)) > (m* a b) ((14 32) (32 77))