Решение упражнения 2.30 из SICP

29 January, 2008 (22:34) | Решения упражнений

Определения процедуры 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