中断循环 (Breakloop)

如果你要求 Lisp 做些它不能做的事,求值过程会被一个错误讯息中断,而你会发现你位于一个称为中断循环的地方。中断循环工作的方式取决于不同的实现,但通常它至少会显示三件事:一个错误信息,一组选项,以及一个特别的提示符。

在中断循环里,你也可以像在顶层那样给表达式求值。在中断循环里,你或许能够找出错误的起因,甚至是修正它,并继续你程序的求值过程。然而,在一个中断循环里,你想做的最常见的事是跳出去。多数的错误起因于打错字或是小疏忽,所以通常你只会想终止程序并返回顶层。在下面这个假定的实现里,我们输入 :abort 来回到顶层。

  1. > (/ 1 0)
  2. Error: Division by zero.
  3. Options: :abort, :backtrace
  4. >> :abort
  5. >

在这些情况里,实际上的输入取决于实现。

当你在中断循环里,如果一个错误发生的话,你会到另一个中断循环。多数的 Lisp 会指出你是在第几层的中断循环,要嘛通过印出多个提示符,不然就是在提示符前印出数字:

  1. >> (/ 2 0)
  2. Error: Division by zero.
  3. Options: :abort, :backtrace, :previous
  4. >>>

现在我们位于两层深的中断循环。此时我们可以选择回到前一个中断循环,或是直接返回顶层。