sicp.io
4.1.6 · Именам нужен контекст

Окружение как отображение имен в значения

Для вычисления требуется явное отображение имен переменных в выражении на значения, которые они обозначают.

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

Почему одно и то же выражение может давать другое значение в другом окружении?

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

lookup ищет в ассоциативном списке пару, чей car является запрошенным символом. Элемент cdr этой пары представляет собой значение, предоставленное этим окружением.

evaluate не связывает постоянное значение с x или y. Процедура получает окружение вместе с выражением, поэтому одно и то же дерево выражения можно использовать повторно с другими связываниями.

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

    Первая программа связывает x с 3 и y с 4, затем возвращает 11.

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

    Найдите случаи символов для x и y, а также вызовы assoc, которые их разрешают. Обе рекурсивные ветви получают одно и то же значение окружения.

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

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

    Измените только окружение так, чтобы первое выражение возвращало 25. Оставьте цитированное выражение без изменений.

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

    Выражение вычисляет x плюс удвоенный y, поэтому подходит множество различных пар связываний.

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

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