計算機プログラムの構造と解釈 第二版 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))
ぬふー