Le REPL signifie Read Eval Print Loop.
(loop (print (eval (read))))
Au-dessus est seulement conceptuelle, le vrai code de REPL est beaucoup plus compliqué (avec gestion des erreurs, débogage, ...).
Vous pouvez lire toutes sortes de données dans Lisp sans les évaluer. L'évaluation est une étape distincte - indépendante de la lecture des données.
Il existe toutes sortes de fonctions d'E/S dans Lisp. La plus complexe des fonctions fournies est généralement READ, qui lit les s-expressions. Il existe une option dans Common Lisp qui permet une évaluation pendant READ, mais qui peut et doit être désactivée lors de la lecture des données. Donc, les données dans Lisp ne sont pas nécessairement un programme et même si les données sont un programme, alors Lisp peut lire le programme sous forme de données - sans évaluation. Un REPL ne doit être utilisé que par un développeur et ne doit pas être exposé à des utilisateurs arbitraires. Pour obtenir des données auprès des utilisateurs, on utilise les fonctions IO normales, y compris des fonctions telles que READ, qui peuvent lire des expressions S, mais ne les évaluent pas.
Voici quelques choses que l'on ne devrait pas faire:
utilisation READ pour lire des données arbitraires. LIRE pour des exemples permet de lire des données vraiment importantes - il n'y a pas de limite.
évaluer pendant READ ('read eval'). Cela devrait être désactivé.
symboles de lecture de E/S et d'appeler leurs fonctions de symbole
lire des structures de données cycliques avec READ, lorsque vos fonctions attendent des listes simples. Marcher sur une liste cyclique peut garder votre programme occupé pendant un certain temps.
ne gère pas les erreurs de syntaxe pendant la lecture des données.
+1 bonne réponse. – rook