Решение упражнения 1.32 из SICP
Вот теперь мы сведем сложение и умножение фактически к одному процессу. Разница в реализации будет минимальная, что подтверждает близость этих понятий.
Сначала запишем процедуру accumulate в двух вариантах, порождающих соответственно рекурсивный и итеративный процессы.
Рекурсивный вариант:
(define (accumulate combiner null-value term a next b) (if (> a b) null-value (combiner (term a) (accumulate combiner null-value term (next a) next b))))
Итеративный вариант:
(define (accumulate combiner null-value term a next b) (define (iter a accumulator) (if (> a b) accumulator (iter (next a) (combiner accumulator (term a))))) (iter a null-value))
Сумма и произведение будут выражаться через накопление (аккумуляцию) следующим образом:
(define (sum term a next b) (accumulate + 0 term a next b))
(define (product term a next b) (accumulate * 1 term a next b))
Правда, красиво?
Comments
Comment from Johnny
Date: November 6, 2009, 9:39 pm
Правда.
Write a comment