#lang racket
(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))))))
(define (square-tree-map tree)
(map (lambda (sub-tree)
(if (not (pair? sub-tree)) (square sub-tree)
(square-tree-map sub-tree))) tree))
(define a-tree '(1 (2 (3 4) 5) (6 7)))
(square-tree a-tree)
(square-tree-map a-tree)
运行结果
'(1 (4 (9 16) 25) (36 49))
'(1 (4 (9 16) 25) (36 49))