Я задаюсь вопросом о цели или, возможно, более правильно, задачах "читателя" во время интерпретации/компиляции программ Lisp.
Из предварительного исследования вопросов, которое я только что сделал, мне кажется, что читатель (в частности, для Clojure в этом случае) можно рассматривать как "синтаксический препроцессор". Основными обязанностями являются расширение читательских макросов и примитивных форм. Итак, два примера:
'cheese --> (quote cheese)
{"a" 1 "b" 2} --> (array-map "a" 1 "b" 2)
Таким образом, читатель берет текст программы (состоящий из S-выражений), а затем строит и возвращает структуру данных в памяти, которая может быть оценена напрямую.
Как далеко от истины это (и я слишком упростил весь процесс)? Какие еще задачи выполняет читатель? Учитывая достоинство Lisps - их гомоцикличность (код как данные), почему существует необходимость в лексическом анализе (если это действительно сопоставимо с работой читателя)?
Спасибо!