]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_37.rkt
solution to 4.43
[sicp.git] / src / sicp / ex2_37.rkt
1 #lang racket
2
3 (require "utils.rkt"
4          "ex2_36.rkt")
5
6 ;; dot product
7 (define (dot-product v w)
8   (accumulate + 0 (map * v w)))
9
10 (define (matrix-*-vector m v)
11   (map (lambda (r) (dot-product r v)) m))
12
13 (matrix-*-vector '((1 2 3 4) (4 5 6 6) (6 7 8 9)) '(1 2 3 4))
14
15 (define (transpose m)
16   (accumulate-n cons '() m))
17
18 ;; (transpose '((1 2 3) (4 5 6) (7 8 9)))
19
20
21 (define (matrix-*-matrix m n)
22   (let ([cols (transpose n)])
23     (map (lambda (v) (matrix-*-vector cols v)) m))) 
24
25 ;; (matrix-*-matrix '((0 -1 2) (4 11 2)) '((3 -1) (1 2) (6 1)))