使用 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*
緩衝區。