使用 REPL
CL-USER> (+ 2 3)
5
CL-USER> (sin 1.5)
0.997495
CL-USER> (mapcar (lambda (x) (+ x 2)) '(1 2 3))
(3 4 5)
评估后打印的结果不仅仅是一个字符串:后面有一个完整的 Lisp 对象,可以通过右键单击它并选择 Inspect 进行检查。
多行输入也是可能的:使用 C-j
来换行。Enter
-key 将导致评估输入的表单,如果表单未完成,可能会导致错误:
CL-USER> (mapcar (lambda (x y)
(declare (ignore y))
(* x 2))
'(1 2 3)
'(:a :b :c))
(2 4 6)
错误处理
如果评估导致错误:
CL-USER> (/ 3 0)
这将弹出一个带有以下内容的调试器缓冲区(在 SBCL lisp 中):
arithmetic error DIVISION-BY-ZERO signalled
Operation was /, operands (3 0).
[Condition of type DIVISION-BY-ZERO]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1004FA8033}>)
Backtrace:
0: (SB-KERNEL::INTEGER-/-INTEGER 3 0)
1: (/ 3 0)
2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (/ 3 0) #<NULL-LEXENV>)
3: (EVAL (/ 3 0))
4: (SWANK::EVAL-REGION "(/ 3 0) ..)
5: ((LAMBDA NIL :IN SWANK-REPL::REPL-EVAL))
--- more ---
通过 --- more ---
向下移动光标将导致回溯进一步扩展。
在回溯的每一行,按 Enter
将显示有关特定呼叫的更多信息(如果可用)。
在重新启动行上按 Enter
将导致调用特定的重新启动。或者,可以通过数字 0
,1
或 2
选择重启(在缓冲区中的任何位置按相应的键)。默认重启由星号标记,可以通过按键 q
(退出)调用。按 q
将关闭调试器并在 REPL 中显示以下内容
; Evaluation aborted on #<DIVISION-BY-ZERO {10064CCE43}>.
CL-USER>
最后,很少,但 Lisp 可能会遇到 Lisp 调试器无法处理的错误,在这种情况下,它将进入低级调试器或异常完成。要查看此类错误的原因,请切换到*inferior-lisp*
缓冲区。