DEFPACKAGE
和
IN-PACKAGE
定义为宏。它们的字面意思是-a
字符串指示符
:
foobar
,
|FOOBAR|
,
#:FOOBAR
,
:FOOBAR
或
"FOOBAR"
.
DELETE-PACKAGE
是一个函数,也需要一个字符串指示符。但因为它是一个函数,所以参数是被计算出来的。这意味着:如果你想传递这个名字,你必须引用它——如果它是一个不在关键字包中的符号。字符串和关键字符号是自评估的,不需要引用。的有效参数
删除包
例如:
'foobar
'|FOOBAR|
'#:FOOBAR
:FOOBAR or ':FOOBAR
"FOOBAR" or '"FOOBAR"
自从
删除包
是一个函数,参数将被计算->您还可以计算变量、函数调用…作为论据。
错误:删除当前包
LISP工作:
CL-USER 43 > (delete-package (in-package #:match-test))
Error: Cannot delete the current package, #<The MATCH-TEST package, 0/16 internal, 2/16 external>.
1 (abort) Return to top loop level 0.
SBCL:
* (delete-package (in-package #:match-test))
debugger invoked on a SIMPLE-TYPE-ERROR in thread
#<THREAD "main thread" RUNNING {10005605B3}>:
*PACKAGE* can't be a deleted package:
It has been reset to #<PACKAGE "COMMON-LISP-USER">.
您的代码试图删除
当前程序包
-你刚用过
包装内
使其成为当前包-删除当前包通常不是一个好主意。你在开枪打自己的脚。Lisp可能会阻止这种情况(就像我在LispWorks中的例子一样)或者允许这种情况发生——但是你必须忍受后果。