In Структура и интерпретация компьютерных программ (SICP) Раздел 2.2.3 Некоторые функции определены с использованием:
(accumulate cons nil
(filter pred
(map op sequence)))
Два примера, которые используют это, оперируют списком чисел Фибоначчи, even-fibs
и list-fib-squares
.
Функции накопления, фильтрации и отображения также определены в разделе 2.2. Меня смущает то, что авторы включили сюда accumulate
. accumulate
принимает 3 параметра:
Двоичная функция, которую нужно применить
Начальное значение, используемое в качестве самого правого параметра для функции
Список, к которому будет применена функция
Пример применения накопления к списку с использованием определения в книге:
(accumulate cons nil (list 1 2 3))
=> (cons 1 (cons 2 (cons 3 nil)))
=> (1 2 3)
Поскольку третий параметр является списком, (accumulate cons nil some-list)
просто вернет some-list
, и в этом случае результат (filter pred (map op sequence))
будет списком.
Есть ли причина для такого использования accumulate
, кроме согласованности с другими аналогично структурированными функциями в разделе?