El REPL significa Read Eval Print Loop.
(loop (print (eval (read))))
anterior es sólo conceptual, el código REPL real es mucho más complicado (con control de errores, depuración, ...).
Puede leer todo tipo de datos en Lisp sin evaluarlo. La evaluación es un paso separado, independiente de la lectura de datos.
Hay todo tipo de funciones de IO en Lisp. La más compleja de las funciones proporcionadas suele ser LEER, que lee s-expresiones. Hay una opción en Common Lisp que permite la evaluación durante READ, pero puede y debe apagarse cuando se leen datos.
Por lo tanto, los datos en Lisp no son necesariamente un programa e incluso si los datos son un programa, entonces Lisp puede leer el programa como datos, sin evaluación. Un REPL solo debe ser utilizado por un desarrollador y no debe exponerse a usuarios arbitrarios. Para obtener datos de los usuarios, uno usa las funciones normales de IO, incluidas funciones como READ, que puede leer expresiones S, pero no las evalúa.
Aquí hay algunas cosas que uno no debe hacer:
uso LEER para leer datos arbitrarios. LEER para obtener ejemplos permite leer datos realmente grandes: no hay límite.
evaluar durante READ ('read eval'). Esto debe ser apagado.
símbolos de lectura de E/S y llamar a sus funciones de símbolos
leer estructuras de datos cíclicos con leer, cuando sus funciones esperan listas de civil. Recorrer una lista cíclica puede mantener ocupado su programa por un tiempo.
no manejan los errores de sintaxis durante la lectura de los datos.
+1. – rook