如何使Lisp忘记以前导出的符号?

如何使Lisp忘记以前导出的符号?,lisp,common-lisp,slime,sbcl,Lisp,Common Lisp,Slime,Sbcl,这就是我如何从包foo导出符号:bar和:baz: (in-package :cl-user) (defpackage foo (:use :cl) (:export :bar :baz)) (in-package :foo) 当我从导出符号列表中删除:baz时,SBCL投诉,编译失败 warning: FOO also exports the following symbols: (FOO:BAZ) 如何让SBCL忘记:baz,而不重新装入粘液?SB

这就是我如何从包
foo
导出符号
:bar
:baz

(in-package :cl-user)
(defpackage foo
   (:use :cl)
   (:export :bar :baz))
(in-package :foo)
当我从导出符号列表中删除
:baz
时,SBCL投诉,编译失败

 warning: 
     FOO also exports the following symbols:
       (FOO:BAZ)
如何让SBCL忘记
:baz
,而不重新装入粘液?

SBCL

* (apropos "unexport")

UNEXPORT (fbound)


* (documentation 'unexport 'function)

"Makes SYMBOLS no longer exported from PACKAGE."


* (apropos "unintern")

UNINTERN (fbound)


* (documentation 'unintern 'function)

"Makes SYMBOL no longer present in PACKAGE. If SYMBOL was present then T is
returned, otherwise NIL. If PACKAGE is SYMBOL's home package, then it is made
uninterned."

关于这些问题有很多文档,您应该阅读或重读。乍一看,这个包/符号的东西听起来很琐碎,但它与其他语言的区别足以值得一读(即,当涉及到包和符号时,试图重用其他语言的知识尤其危险)

如果在阅读完这些文档后,您仍然有困难,请尝试重新阅读它们(遇到困难所获得的经验将有助于您专注于相关章节;在阅读之间重新阅读而不陷入麻烦对IMHO来说不是很有成效)

我发现一些链接很有用:


    • 搜索引导我来到这里,但我遇到了稍微不同的问题

      ; caught WARNING:
      ;   MY-PACKAGE also uses the following packages:
      ;     (DEPENDENCY)
      
      在这种情况下,我们需要

      *(文档“未使用包”功能)
      “从包的使用列表中删除要使用的包。”