木構造の葉の部分は単なる整数なんですけど、そういう木の葉っぱの部分を2乗する関数を書けとかそういう。
単純なのはこっちです。あんまし抽象な感じでもない。
(define (square x) (* x x)) (define (square-tree tree) (cond ((null? tree) ()) ((not (pair? tree)) (square tree)) (else (cons (square-tree (car tree)) (square-tree (cdr tree))))))
例題に出てるmap使う方法がすげーキレイだなーと関心したんですけど、それをマネるとこういう風になる。
(define (map proc items) (if (null? items) () (cons (proc (car items)) (map proc (cdr items))))) (define (square-tree tree) (map (lambda (sub-tree) (if (pair? sub-tree) (square-tree sub-tree) (square sub-tree))) tree))
どっちでもおなじ答えが出ます!
gosh> (square-tree (list 1 (list 2 (list 3 4) 5) (list 6 7))) (1 (4 (9 16) 25) (36 49))