sicp.io
4.1.3 · Вычислитель внутри языка

Программа как данные для другой программы

Как только выражение представлено списками и символами, обычная процедура Scheme может определять смысл этого выражения.

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

Что должен сделать вычислитель, чтобы превратить данные выражения в значение?

  • Разделение данных исходного кода и исполняющего их вычислителя
  • Диспетчеризация по символу операции
  • Рекурсивное вычисление вложенного выражения

Цитированный список является данными, поэтому базовый вычислитель не применяет его начальный символ plus. Наша процедура evaluate исследует этот символ и сама выбирает операцию.

Числа вычисляются напрямую. Составное выражение требует от evaluate интерпретировать оба вложенных операнда перед объединением их значений. Вычислитель обходит дерево выражения по одному узлу за раз.

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

    Первая программа интерпретирует цитированное выражение и возвращает 20.

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

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

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

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

    Добавьте деление в варианты операций, затем интерпретируйте выражение (/ (+ 8 4) 3).

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

    Новый случай имеет ту же рекурсивную структуру, что сложение и умножение.

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

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