您可以使用 clisp (或 sbcl)在出现可继续错误时自动继续吗?

问题描述 投票:0回答:1

这似乎是一个显而易见的问题,但我的谷歌搜索表明答案是否定的,我觉得很难相信。我刚刚开始使用教科书上的示例,并得到以下结果。我必须输入“继续”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

注释

lisp common-lisp clisp
1个回答
0
投票

是的,可以。 例如这个宏:

(defmacro continuing (&body forms)
  `(handler-bind
       ((error #'continue))
     ,@forms))

对于有错误的错误,或者存在与任何条件无关的

continue
重新启动,将调用
continue
重新启动。

您几乎不想这样做。特别是,在这种情况下,系统会发出错误信号,因为程序正在尝试修改 CL 包中的符号。 CL 包包含命名 Common Lisp 的所有基本函数和变量的符号,因此这“几乎永远不会”是您想要做的事情,当然,只有当您“确切”知道这样做的后果时才需要做那个。 我不知道为什么 PAIP 代码认为这样做是合理的。

© www.soinside.com 2019 - 2024. All rights reserved.