如何让CLISP或SBCL在可恢复错误时自动执行continue操作?
CLISP加载PAIP示例代码时需多次输入continue的解决办法
加载《人工智能程序设计范式》(PAIP)中的auxfns.lsp和4_general_problem_solver.lsp文件时,CLISP会抛出包锁定错误,且需要输入4次continue才能回到REPL:
$ 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
问题原因
错误源于代码尝试修改Common Lisp标准包(COMMON-LISP)中的符号(比如重定义标准函数debug),而CLISP默认锁定标准包以防止意外修改。
解决办法
方法1:启动CLISP时添加ANSI兼容参数
启动CLISP时加上-ansi参数,解除对标准包的严格锁定:
clisp -ansi -i auxfns.lsp -i 4_general_problem_solver.lsp
方法2:修改代码使用自定义包
在代码文件开头添加包声明,将所有自定义函数放到独立包中,避免触碰标准包:
(defpackage :paip-gps (:use :cl)) (in-package :paip-gps)
之后把文件内的所有函数定义都放在这个包的作用域内即可。
内容的提问来源于stack exchange,提问作者Sridhar Sarnobat
相关产品推荐
相关产品推荐

