問題2.30、問題2.31 – SICP(計算機プログラムの構造と解釈)その45

問題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))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»