Глава 20
Вычислитель

 20.1 Вычисление форм
 20.2 Цикл взаимодействия с пользователем

Механизм, который выполняет программы на Лиспе, называется вычислитель. Более подробно, вычислитель принимает форму и выполняет расчёты определённые формой. Этот механизм доступен пользователю через функцию eval.

Вычислитель, как правило, реализован как интерпретатор, который рекурсивно проходит по данной форме, выполняя каждый шаг вычисления по мере прохода. Однако, интерпретирующая реализация не обязательна. Допустимым альтернативным подходом для вычислителя является вначале полностью скомпилировать форму в выполняемый машиной код, и затем вызывать результат. Эта техника практически исключает несовместимости между интерпретируемым и компилируемым кодом, но также делает механизм evalhook относительно бесполезным. Допустимы также различные смешанные стратегии. Все эти подходы должны обеспечивать одинаковые результаты при выполнении корректной программы, но могут возвращать различные результаты для неправильных программ. Например, поведение может отличаться в том, когда раскрывается вызов макроса, определения макросов не должны зависеть от времени, когда они раскрываются. Разработчики должны документировать стратегию вычисления для каждой реализации.