Каковы задачи «читателя» во время интерпретации Лиспа?

Я задаюсь вопросом о цели, или, возможно, вернее, о задачах «читателя» во время интерпретации / компиляции программ на Лиспе. .

Из предварительного исследования, которое я только что провел, мне кажется, что читателя (в данном случае, в частности, Clojure) можно рассматривать как «синтаксический препроцессор». Его основные обязанности - расширение макросов чтения и примитивных форм. Итак, два примера:

'cheese         -->  (quote cheese)
{"a" 1 "b" 2}   -->  (array-map "a" 1 "b" 2)

Итак, читатель берет текст программы (состоящий из S-выражений), а затем строит и возвращает структуру данных в памяти, которую можно вычислить напрямую.

Как далеко от правда в том (и не упростил ли я весь процесс)? Какие еще задачи выполняет читатель? Учитывая, что достоинством Lisp'ов является их гомоаконичность (код как данные), зачем нужен лексический анализ (если он действительно сопоставим с работой читателя)?

Спасибо!

10
задан Andrew 28 December 2010 в 06:35
поделиться