如何将#'package-name 与'in-package 一起使用?
How to use #'package-name with 'in-package?
我正在尝试编写一个简单的函数来创建包并转到创建的包。为此,我正在尝试以下操作:
(let ((my-pack (make-package "dada")))
(in-package (package-name my-pack)))
但是,它不起作用。仔细观察,我注意到这是因为包内是宏 - 它接受符号或字符串作为名称。我无法尝试任何有趣的技巧,例如预先定义包含名称的变量,因为包含名称的符号名称将被解释为我正在寻找的包的名称。
那么,我怎样才能
我在 Linux 上使用 SBCL 1.1.18,但我希望解决方案是跨平台的。
没有什么比 'going to a package' 更好的了。你可以告诉 Lisp,current package 是哪个。这会进一步影响 lookup/creation 符号(例如在 阅读 期间)和符号打印。
您可以做的一件事是:
CL-USER 53 > (cl:setf cl:*package* (cl:make-package "DADA"))
#<The DADA package, 0/16 internal, 0/16 external>
上面创建了名为 DADA
的包并为其设置了 cl:*package*
。
DADA 54 > 'foo
FOO
DADA 55 > (cl:describe 'foo)
FOO is a SYMBOL
NAME "FOO"
VALUE #<unbound value>
FUNCTION #<unbound function>
PLIST NIL
PACKAGE #<The DADA package, 1/16 internal, 0/16 external>
将默认包设置回 CL-USER
:
COMMON-LISP 57 > (cl:setf *package* (cl:find-package "CL-USER"))
#<The COMMON-LISP-USER package, 1307/4096 internal, 0/4 external>
in-package
的存在还告诉 Lisp 在 编译时间 .
期间更改 当前包
我正在尝试编写一个简单的函数来创建包并转到创建的包。为此,我正在尝试以下操作:
(let ((my-pack (make-package "dada")))
(in-package (package-name my-pack)))
但是,它不起作用。仔细观察,我注意到这是因为包内是宏 - 它接受符号或字符串作为名称。我无法尝试任何有趣的技巧,例如预先定义包含名称的变量,因为包含名称的符号名称将被解释为我正在寻找的包的名称。
那么,我怎样才能
我在 Linux 上使用 SBCL 1.1.18,但我希望解决方案是跨平台的。
没有什么比 'going to a package' 更好的了。你可以告诉 Lisp,current package 是哪个。这会进一步影响 lookup/creation 符号(例如在 阅读 期间)和符号打印。
您可以做的一件事是:
CL-USER 53 > (cl:setf cl:*package* (cl:make-package "DADA"))
#<The DADA package, 0/16 internal, 0/16 external>
上面创建了名为 DADA
的包并为其设置了 cl:*package*
。
DADA 54 > 'foo
FOO
DADA 55 > (cl:describe 'foo)
FOO is a SYMBOL
NAME "FOO"
VALUE #<unbound value>
FUNCTION #<unbound function>
PLIST NIL
PACKAGE #<The DADA package, 1/16 internal, 0/16 external>
将默认包设置回 CL-USER
:
COMMON-LISP 57 > (cl:setf *package* (cl:find-package "CL-USER"))
#<The COMMON-LISP-USER package, 1307/4096 internal, 0/4 external>
in-package
的存在还告诉 Lisp 在 编译时间 .