計算機プログラムの構造と解釈 第二版 P64 問題2.31

この問題も大して難しくない。


そもそも「抽象化」し、とか難しそうに書いているけど、
前の問題のmap使ってる方の「*」ってなっているところを、
引数として取得した手続きを使えるようにすればいいだけだ。


実装

#!/usr/local/bin/gosh
;; -*- coding: utf-8 -*-

(use ggc.debug.trace)
(use math.mt-random)

(define nil '())

(define (square n)
  (* n n)) 

(define mytree (list 1 (list 2 (list 3 4) 5) (list 6 7)))

(define (tree-map f tree)
  (map (lambda (sub-tree)
         (if (pair? sub-tree)
           (square-tree sub-tree)
           (f sub-tree)))
       tree))

(define (square-tree tree) (tree-map square tree))


;; main
(define (main args)

  (display "mytree: ")
  (display mytree)
  (newline)

  (display "(square-tree mytree): ")
  (display (square-tree mytree))
  (newline)

  0)


実行

mytree: (1 (2 (3 4) 5) (6 7))
(square-tree mytree): (1 (4 (9 16) 25) (36 49))

ぬふー