Решение упражнения 2.30 из SICP
Определения процедуры square-tree (как прямое, так и с применением map) аналогичны определениям scale-tree, рассмотренным в основном тексте книги, поэтому подробно разбирать, как они построены, не буду, а приведу только код:
(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 tree) (map (lambda (t) (if (pair? t) (square-tree t) (square t))) tree))
Второй подход с использованием map можно описать так: для каждого узла дерева, начиная с корня, выполнить проход по всем дочерним узлам, если очередной дочерний узел является листом, то возвести его в квадрат, в противном случае запустить тот же процесс для этого узла; результаты компонуются в такую же структуру, что и исходная.
Write a comment