在基于 Lisp 的系统中,通常在程序从 REPL(读取 eval 打印循环)运行时开发程序。所以它集成了一堆工具:完成,编辑器,命令行解释器,调试器,......默认是有的。键入带有错误的表达式 - 您处于另一个 REPL 级别并启用了一些调试命令。你实际上必须做一些事情来摆脱这种行为。
REPL 概念可以有两种不同的含义:
像 Lisp(或其他一些类似语言)中的 Read Eval Print Loop。它读取程序和数据,评估并打印结果数据。Python 不能以这种方式工作。Lisp 的 REPL 允许您直接以元编程方式工作,编写生成(代码)的代码、检查扩展、转换实际代码等。Lisp 具有 read/eval/print 作为顶部循环。Python 有类似 readstring/evaluate/printstring 作为顶层循环。
命令行界面。交互式外壳。参见例如IPython。将其与 Common Lisp 的SLIME进行比较。
默认模式下 Python 的默认 shell 对于交互使用来说并不是那么强大:
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
>>>
您收到一条错误消息,仅此而已。
将其与 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 使用 Lisp 的条件系统闯入调试器 REPL。它提出了一些重新启动。在错误上下文中,新的 REPL 提供了扩展命令。
让我们使用:R1
重启:
Break 1 [2]> :r1
Use instead of A> 2
4
[3]>
因此,您可以获得程序的交互式修复和执行运行......