Окружение как отображение имен в значения
Для вычисления требуется явное отображение имен переменных в выражении на значения, которые они обозначают.
Почему одно и то же выражение может давать другое значение в другом окружении?
- Представление связываний в виде ассоциативного списка
- Поиск символов отдельно от вычисления чисел
- Передача одного окружения через каждый рекурсивный вызов
lookup ищет в ассоциативном списке пару, чей car является запрошенным символом. Элемент cdr этой пары представляет собой значение, предоставленное этим окружением.
evaluate не связывает постоянное значение с x или y. Процедура получает окружение вместе с выражением, поэтому одно и то же дерево выражения можно использовать повторно с другими связываниями.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа связывает x с 3 и y с 4, затем возвращает 11.
Найдите случаи символов для x и y, а также вызовы assoc, которые их разрешают. Обе рекурсивные ветви получают одно и то же значение окружения.
Измените программу и сравните результат.
Измените только окружение так, чтобы первое выражение возвращало 25. Оставьте цитированное выражение без изменений.
Показать подсказку
Выражение вычисляет x плюс удвоенный y, поэтому подходит множество различных пар связываний.