sicp.io
4.1.10 · Разделение анализа и выполнения

Анализ выражения и повторный запуск плана

Анализатор может преобразовать данные выражения в процедуру, которая принимает окружение и выполняет только оставшийся поиск значений и операции.

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

Какую работу можно выполнить до того, как выражение получит окружение?

  • Преобразование каждого узла выражения в процедуру исполнения
  • Сохранение проанализированных планов операндов в замыкании
  • Повторное использование одного плана с несколькими окружениями

analyze обходит дерево выражения до того, как становятся известны значения переменных. Процедура выбирает каждый оператор и рекурсивно строит процедуру для каждого операнда.

Полученный plan принимает окружение. Его запуск выполняет только поиск переменных, запуск сохраненных планов операндов и применение уже выбранного оператора. Поэтому один проанализированный plan может обслуживать множество окружений.

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

    Первая программа анализирует одно выражение и возвращает (11 25) из двух окружений.

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

    Отделите начальные применения analyze от последующих применений plan. Структура выражения обходится один раз до передачи любого из окружений.

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

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

    Добавьте третье окружение, где x равен 1 и y равен 100. Используйте plan повторно без повторного вызова analyze.

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

    Только добавьте еще одно применение plan в финальный список.

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

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