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

30 January, 2008 (21:38) | Решения упражнений

Чрезвычайно приятное упражнение. Определение count-leaves с помощью накопления выглядит следующим образом:

(define (count-leaves t)
    (accumulate +
                0
                (map (lambda (x) (if (pair? x)
                                     (count-leaves x)
                                     1))
                     t)))

Смысл определения заключается в том, что мы вычисляем число листьев в дереве, суммируя числа листьев в каждом из его поддеревьев. Количество листьев в поддереве вычисляется либо рекурсивным вызовом самой процедуры count-leaves, если поддерево не является листом, либо равно 1, если поддерево - это лист.

Write a comment