問題2.30、問題2.31 – SICP(計算機プログラムの構造と解釈)その45
2008年12月21日
問題2.30
直接(高階手続きを使わずに)再帰的に定義
(define (square-tree tree) (cond ((null? tree) ()) ((not (pair? tree)) (square tree)) (else (cons (square-tree (car tree)) (square-tree (cdr tree)))))) (define x (list 1 (list 2 (list 3 4) 5) (list 6 7))) ; (1 (2 (3 4) 5) (6 7)) (square-tree x) gosh> (1 (4 (9 16) 25) (36 49))
map
と再帰を使って定義
(define (square-tree tree) (map (lambda (sub-tree) (if (pair? sub-tree) (square-tree sub-tree) (square sub-tree))) tree)) (square-tree x) gosh> (1 (4 (9 16) 25) (36 49))
問題2.31
tree-map
で抽象化する。
(define (square-tree tree) (tree-map square tree))
再帰的に定義
(define (tree-map proc tree) (cond ((null? tree) ()) ((not (pair? tree)) (proc tree)) (else (cons (tree-map proc (car tree)) (tree-map proc (cdr tree)))))) (define x (list 1 (list 2 (list 3 4) 5) (list 6 7))) ; (1 (2 (3 4) 5) (6 7)) (square-tree x) gosh> (1 (4 (9 16) 25) (36 49))
map
と再帰を使って定義
(define (tree-map proc tree) (map (lambda (sub-tree) (if (pair? sub-tree) (tree-map proc sub-tree) (proc sub-tree))) tree)) (square-tree x) gosh> (1 (4 (9 16) 25) (36 49))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542