使用 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 将导致调用特定的重新启动。或者,可以通过数字 012 选择重启(在缓冲区中的任何位置按相应的键)。默认重启由星号标记,可以通过按键 q退出)调用。按 q 将关闭调试器并在 REPL 中显示以下内容

; Evaluation aborted on #<DIVISION-BY-ZERO {10064CCE43}>.
CL-USER> 

最后,很少,但 Lisp 可能会遇到 Lisp 调试器无法处理的错误,在这种情况下,它将进入低级调试器或异常完成。要查看此类错误的原因,请切换到*inferior-lisp*缓冲区。