問題 2.30

(define (square x) (* x x))

;高階手続き無しの形。
(define (square-tree tree)
  (cond ((null? tree) null)
        ((not (pair? tree)) (square tree))
        (else (cons (square-tree (car tree))
                    (square-tree (cdr tree))))))

(square-tree (list 1 (list 2 (list 3 4) 5) (list 6 7)))
;-> (1 (4 (9 16) 25) (36 49))

;map再帰の形。
(define (square-tree tree)
  (map (lambda (item)
         (if (pair? item)
             (square-tree item)
             (square item))) tree))

(square-tree (list 1 (list 2 (list 3 4) 5) (list 6 7)))
;-> (1 (4 (9 16) 25) (36 49))