summaryrefslogtreecommitdiff
path: root/coding-exercises/2/37.rkt
blob: 4acdc18430a569189ce80dfd1f98b34f278ed7a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#lang racket
(require "../../shared/lists.rkt")

(define (dot-product v w)
  (accumulate + 0 (map * v w)))

(define (matrix-*-vector m v)
  (map (lambda (m-row)
         (accumulate + 0 (map * m-row v))) m))

(define (transpose mat)
  (accumulate-n cons '() mat))

(define (matrix-*-matrix m n)
  (let ((cols (transpose n)))
    (map (lambda (m-row)
           (map (lambda (n-col)
                  (dot-product m-row n-col)) cols)) m)))

(define test-m (list (list 1 2 3 4)
                     (list 4 5 6 6)
                     (list 6 7 8 9)))
(define test-n (list (list 1 2 3)
                     (list 4 5 6)
                     (list 6 7 8)
                     (list 6 7 8)))
(define test-v (list 1 2 3 4))
((lambda ()
   (newline)
   (display (matrix-*-vector test-m test-v))
   (newline)
   (display (transpose test-m))
   (newline)
   (display (matrix-*-matrix test-m test-n))))