1 (define (test-case actual expected)
10 (define (accumulate op initial sequence)
14 (accumulate op initial (cdr sequence)))))
16 (define (accumulate-n op init seqs)
17 (if (null? (car seqs))
19 (cons (accumulate op init (map car seqs))
20 (accumulate-n op init (map cdr seqs)))))
22 (define (dot-product v w)
23 (accumulate + 0 (map * v w)))
25 (define (matrix-*-vector m v)
30 (define (transpose mat)
31 (accumulate-n cons '() mat))
33 (define (matrix-*-matrix m n)
34 (let ((cols (transpose n)))
36 (matrix-*-vector cols m-row))
39 (define m1 '((1 2 3) (4 5 6) (7 8 9)))
40 (define m2 '((3 1 9) (3 -2 -4) (7 0 5)))
41 (define m3 '((30 36 42) (66 81 96) (102 126 150)))
42 (define m4 '((3 1 9 -5 -2 1)
51 (define m6 '((12 59 -21)
54 (define m7 '((1 2 0 -4 5 -3)
64 (define v2 '(14 32 50))
66 (define v4 '(41 -8 34))
68 (test-case (matrix-*-vector m1 v1) v2)
69 (test-case (matrix-*-vector m2 v3) v4)
72 (test-case (transpose m5) m7)
73 (test-case (transpose m4) m8)
75 (test-case (matrix-*-matrix m1 m1) m3)
76 (test-case (matrix-*-matrix m4 m5) m6)