¿Cuáles son las tareas del "lector" durante la interpretación de Lisp?

Me pregunto sobre el propósito, o quizás más correctamente, las tareas del "lector" durante la interpretación / compilación de los programas Lisp.

De la investigación previa a la pregunta que acabo de hacer, me parece que un lector (en particular a Clojure en este caso) puede considerarse como un "preprocesador sintáctico". Sus funciones principales son la expansión de las macros de lectura y las formas primitivas. Entonces, dos ejemplos:

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

Entonces, el lector toma el texto de un programa (que consiste en S-Expressions) y luego construye y devuelve una estructura de datos en memoria que puede evaluarse directamente.

¿Qué tan lejos de la verdad está esto (y he simplificado demasiado todo el proceso)? ¿Qué otras tareas realiza el lector? Teniendo en cuenta que una virtud de Lisps es su homoiconicidad (código como datos), ¿por qué existe la necesidad de un análisis léxico (si tal es realmente comparable al trabajo del lector)?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta