(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
(define (accumulate-n op init seqs)
(if (null? (car seqs))
'()
(cons (accumulate op init (map (lambda (sub-seqs) (car sub-seqs)) seqs))
(accumulate-n op init (map (lambda (sub-seqs) (cdr sub-seqs)) seqs)))))
(define v (list 2 2 2 2))
(define w (list 3 3 3 3))
(define m (list (list 1 2 3 4)
(list 4 5 6 6)
(list 6 7 8 9)))
(define (dot-product v w)
(accumulate + 0 (map * v w)))
(newline)
(display (dot-product v w))
(define (matrix-*-vector m v)
(map (lambda (x) (dot-product x v)) m))
(newline)
(display (matrix-*-vector m v))
(define (transpose mat)
(accumulate-n cons '() mat))
(newline)
(display (transpose m))
(define n (transpose m))
(define (matrix-*-matrix m n)
(let ((cols (transpose n)))
(map (lambda (vec) (matrix-*-vector cols vec)) m)))
(newline)
(display (matrix-*-matrix m n))
SICP 习题2.37 矩阵乘法的一些实现
最新推荐文章于 2020-12-27 17:38:12 发布