Dans un système basé sur Lisp, on développe généralement le programme pendant son exécution à partir de la boucle REPL (read eval print). Il intègre donc un ensemble d'outils : complétion, éditeur, interpréteur de ligne de commande, débogueur, ... Par défaut, c'est le cas. Tapez une expression avec une erreur - vous êtes dans un autre niveau de REPL avec des commandes de débogage activées. Vous devez en fait faire quelque chose pour vous débarrasser de ce comportement.
Vous pouvez avoir deux significations différentes du concept de REPL :
-
la boucle Read Eval Print comme en Lisp (ou quelques autres langages similaires). Elle lit les programmes et les données, elle les évalue et imprime les données résultantes. Python ne fonctionne pas de cette manière. Le REPL de Lisp vous permet de travailler directement de manière méta-programmée, en écrivant du code qui génère (du code), vérifie les expansions, transforme le code réel, etc. Lisp a read/eval/print comme boucle supérieure. Python a quelque chose comme readtring/evalate/printstring comme boucle supérieure.
-
l'interface de ligne de commande. Un shell interactif. Voir par exemple pour IPython . Comparez cela à la méthode de Common Lisp SLIME .
Le shell de Python en mode par défaut n'est pas vraiment très puissant pour une utilisation interactive :
Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
Vous obtenez un message d'erreur et c'est tout.
Comparez cela au CLISP REPL :
rjmba:~ joswig$ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010
Type :h and hit Enter for context help.
[1]> (+ a 2)
*** - SYSTEM::READ-EVAL-PRINT: variable A has no value
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead of A.
STORE-VALUE :R2 Input a new value for A.
ABORT :R3 Abort main loop
Break 1 [2]>
CLISP utilise le système de condition de Lisp pour s'introduire dans un REPL de débogueur. Il présente quelques redémarrages. Dans le contexte des erreurs, le nouveau REPL fournit des commandes étendues.
Utilisons le :R1
redémarrer :
Break 1 [2]> :r1
Use instead of A> 2
4
[3]>
Ainsi, vous obtenez une réparation interactive des programmes et des exécutions...