Lisp SYMBOL-PACKAGE-LOCKED-ERROR

时间:2013-04-30 14:05:32

标签: common-lisp sbcl

我是Lisp的新手所以当我在SBCL中编写函数时

(defun subst (new old l)
  (cond   
   ((null l) '())
   ((eq old (car l)) (cons new (cdr l)))
   ((cons (car l) (subst new old (cdr l))))))

它给出了错误SYMBOL-PACKAGE-LOCKED-ERROR,样式警告和警告,请帮助解决它

1 个答案:

答案 0 :(得分:4)

您正在尝试重新定义cl:subst。根据HyperSpec的§11.1.2.1.2,未定义当您尝试执行此操作时会发生什么。大多数实现都有某种类型的包锁,这会阻止这种重新定义。您可以通过解锁软件包来解决这些问题,但在这种情况下,使用subst以外的名称(例如my-subst)或定义新软件包会更好,比如说{ {1}},隐藏my-cl并定义cl:subst

SBCL提供的错误实际上相当丰富,并提供了我上面链接的HyperSpec页面的引用,以及Chapter 11. Package Locks中的SBCL manual

my-cl:subst