这似乎是一个显而易见的问题,但我的谷歌搜索表明答案是否定的,我觉得很难相信。我刚刚开始使用教科书上的示例,并得到以下结果。我必须输入“继续”4 次才能到达我的 repl(在
clisp
中)。
$ clisp -i auxfns.lsp -i 4_general_problem_solver.lsp
...
** - Continuable Error
DEFUN/DEFMACRO(DEBUG): #<PACKAGE COMMON-LISP> is locked
If you continue (by typing 'continue'): Ignore the lock and proceed
是的,可以。 例如这个宏:
(defmacro continuing (&body forms)
`(handler-bind
((error #'continue))
,@forms))
对于有错误的错误,或者存在与任何条件无关的
continue
重新启动,将调用 continue
重新启动。
您几乎不想这样做。特别是,在这种情况下,系统会发出错误信号,因为程序正在尝试修改 CL 包中的符号。 CL 包包含命名 Common Lisp 的所有基本函数和变量的符号,因此这“几乎永远不会”是您想要做的事情,当然,只有当您“确切”知道这样做的后果时才需要做那个。 我不知道为什么 PAIP 代码认为这样做是合理的。