SICP Накопить функцию

В разделе 2.2.3 " Структура и интерпретация компьютерных программ" (SICP) несколько функций определены с использованием:

(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 кроме согласованности с другими аналогично структурированными функциями в разделе?

1 ответ

Решение

Я уверен, что эти два использования accumulate являются просто иллюстрацией того факта, что "составляющие элементы для построения списка" могут рассматриваться как накопительный процесс таким же образом, как "умножение чисел для получения продукта" или "суммирование чисел для получения итога". Вы правы в том, что накопление по сути дела не является операцией.

(В сторону: обратите внимание, что это, очевидно, может быть более полезной операцией, если вывод filter и ввод accumulate не было списка; например, если он представляет лениво сгенерированную последовательность.)

Другие вопросы по тегам