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

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

Не устаю восхищаться удачным подбором упражнений в книге. Фактически упражнения - это логическое продолжение основного текста, которые дают дополнительную пищу для размышлений и позволяют увидеть скрытые нюансы.

Обобщенная процедура накопления accumulate-n строится поразительно просто. Достаточно лишь взять в соответствующих местах все первые элементы набора последовательностей и все “хвосты” последовательностей, то есть задействовать всеми любимые car и cdr:

(define (accumulate-n op init seqs)
    (if (null? (car seqs))
        nil
        (cons (accumulate op init (map car seqs))
              (accumulate-n op init (map cdr seqs)))))

Write a comment