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