(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))