Программа как данные для другой программы
Как только выражение представлено списками и символами, обычная процедура Scheme может определять смысл этого выражения.
Что должен сделать вычислитель, чтобы превратить данные выражения в значение?
- Разделение данных исходного кода и исполняющего их вычислителя
- Диспетчеризация по символу операции
- Рекурсивное вычисление вложенного выражения
Цитированный список является данными, поэтому базовый вычислитель не применяет его начальный символ plus. Наша процедура evaluate исследует этот символ и сама выбирает операцию.
Числа вычисляются напрямую. Составное выражение требует от evaluate интерпретировать оба вложенных операнда перед объединением их значений. Вычислитель обходит дерево выражения по одному узлу за раз.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа интерпретирует цитированное выражение и возвращает 20.
Проследите за evaluate в обоих деревьях вложенных операндов. Каждое число попадает в случай прямого значения, а каждый список переходит к выбору операции.
Измените программу и сравните результат.
Добавьте деление в варианты операций, затем интерпретируйте выражение (/ (+ 8 4) 3).
Показать подсказку
Новый случай имеет ту же рекурсивную структуру, что сложение и умножение.