問題2.37 – SICP(計算機プログラムの構造と解釈)その51
2008年12月27日
問題2.37
accumulate
手続きと accumulate-n
手続き
(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 car seqs)) (accumulate-n op init (map cdr seqs)))))
総和 dot-product
(define (dot-product v w) (accumulate + 0 (map * v w))) (dot-product (list 1 2 3) (list 4 5 6)) gosh> 32
マトリックス * ベクタ matrix-*-vector
(define (matrix-*-vector m v) (map (lambda (x) (dot-product v x)) m)) (matrix-*-vector '((2 -1) (-3 4)) '(1 2)) gosh> (0 5)
転置行列(transposed matrix) transpose
(define (transpose mat) (accumulate-n cons () mat)) (transpose '((1 2 3) (4 5 6) (7 8 9))) gosh> ((1 4 7) (2 5 8) (3 6 9))
マトリックス * マトリックス matrix-*-matrix
(define (matrix-*-matrix m n) (let ((cols (transpose n))) (map (lambda (x) (matrix-*-vector cols x)) m))) (matrix-*-matrix '((1 -1) (-2 3)) '((1 2) (3 4))) gosh> ((-2 -2) (7 8))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542