summaryrefslogtreecommitdiff
path: root/coding-exercises/2/37.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/37.rkt')
-rw-r--r--coding-exercises/2/37.rkt34
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))))