Решение упражнения 2.35 из SICP
Чрезвычайно приятное упражнение. Определение 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