Основная идея заключается в том, что язык Lisp имеет очень маленькое ядро из нескольких функций, и основной механизм оценки может быть записан в коде на одной странице.
Это ядро Lisp .
Чтобы понять основные принципы работы языка, нужно только взглянуть на эту единственную страницу кода: она объясняет, как работают переменные, как работает вызов функций, как можно создавать новые функции и т. Д.
Только подумайте, сколько вы можете удалить из языковой реализации, чтобы добраться до основ. Каков минимальный набор примитивов и каков минимальный механизм исполнения. Чтобы написать Лисп в Лиспе, вам нужно почти ничего.
Если вы посмотрите на реализацию PASCAL (в качестве примера), она реализована не в PASCAL, а в PASCAL + с большим объемом кода, который обеспечивает необходимые структуры данных для представления языковых сущностей, парсера, компилятора, время выполнения, ... - из коробки PASCAL не предлагает много - нужно построить их (или использовать библиотеку).
Вирт (создатель Pascal) написал книгу, в которой объясняется реализация очень маленького языка, похожего на Pascal, - вам все еще нужно написать существенный код для реализации этого языка - парсер, генератор кода, время выполнения, загрузчик, .. .
Напротив, в Lisp исходный код Lisp имеет естественное представление, а основная подпрограмма, которая оценивает код Lisp, - это всего лишь одна функция Lisp. Это может не быть реальной или практической реализацией Lisp, но все же она отличается от ситуации PASCAL, где исходный код не имеет полезного представления (кроме строки или файла), а механизм выполнения гораздо больше кода.
Итак, в Лиспе мы имеем:
Кроме того, ничего не требуется для реализации оценщика Lisp в Lisp.