sicp.io
1.3.1 · Процедуры как аргументы

Изменяющаяся часть вычисления как аргумент

Процедура высшего порядка фиксирует общую форму вычисления, принимая изменяющуюся операцию в качестве аргумента.

Вопрос для размышления

Как одна процедура может описать целое семейство сумм?

  • Обращение с процедурой как с обычным значением
  • Определение инвариантной структуры при суммировании
  • Передача поведения через параметры term и next

Процедура sum не знает, складывает ли она целые числа, квадраты или другую последовательность. Параметр term выбирает значение для сложения. Параметр next выбирает следующую точку. Рекурсия отвечает только за общий шаблон обхода.

Такое разделение служит началом мощного навыка проектирования. Назовите неизменный процесс один раз и передавайте изменяющиеся решения.

Код SICP192 из 1,048,576 байт UTF-8
Примеры
Результат
Вывод
Значение
Диагностика
Трасса выполнения0 / 0 событий
    Запуски происходят внутри браузера с отображением результата программы и трассы выполнения.
    Ожидаемый результат

    Первая программа возвращает 55. Вторая программа также возвращает 55.

    На что обратить внимание в трассе

    Обратите внимание, что term и next ищутся и применяются на каждом шаге. Значения процедур проходят через тот же вычислитель, что и числовые значения.

    Попробуйте сами

    Измените программу и сравните результат.

    Определите процедуру double для term и процедуру step-two для next. Используйте sum, чтобы сложить удвоенные нечетные числа от 1 до 9.

    Показать подсказку

    Граница обхода остается прежней, даже когда next пропускает значения.

    Завершить этот урок

    В этой главе пройдено 0 из 18 уроков0%