diff options
Diffstat (limited to 'coding-exercises/2/37.rkt')
| -rw-r--r-- | coding-exercises/2/37.rkt | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/coding-exercises/2/37.rkt b/coding-exercises/2/37.rkt new file mode 100644 index 0000000..4acdc18 --- /dev/null +++ b/coding-exercises/2/37.rkt @@ -0,0 +1,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)))) |
