在Common Lisp中如何确定系统包含的包

时间:2012-12-21 14:23:14

标签: common-lisp packages quicklisp

每次我通过Quicklisp安装系统时,我总会发现自己正在搜索基本软件包的名称,普通用户会感兴趣,因为它会导出要播放的“最终产品”API。因此,任何人都需要知道它的名字并在REPL上发出命令:

(use-package :package)

为了在REPL上播放它。

有没有快速简便的方法来确定由Quicklisp加载的系统所包含的软件包,而无需搜索过时的文档。

2 个答案:

答案 0 :(得分:5)

您可以使用LIST-ALL-PACKAGES列出所有包。

如果在加载软件之前和之后保留它们,可以进行比较。

CL-USER 14 > (setf *print-length* 10)
10

CL-USER 15 > (list-all-packages)
(#<The SQL-COMMON package, 0/4 internal, 28/32 external> #<The QL-LISPWORKS package, 0/16 internal, 5/16 external> #<The QL-SETUP package, 25/32 internal, 3/16 external> #<The QL-ALLEGRO package, 0/16 internal, 6/16 external> #<The QL-DIST package, 110/256 internal, 81/256 external> #<The COMM package, 1053/4096 internal, 949/1024 external> #<The MP package, 921/1024 internal, 209/256 external> #<The REG package, 41/64 internal, 0/4 external> #<The LOOP package, 247/256 internal, 3/4 external> #<The QL-DIST-USER package, 0/16 internal, 0/16 external> ...)

CL-USER 16 > (defpackage "FOO")
#<The FOO package, 0/16 internal, 0/16 external>

CL-USER 17 > (list-all-packages)
(#<The SQL-COMMON package, 0/4 internal, 28/32 external> #<The QL-LISPWORKS package, 0/16 internal, 5/16 external> #<The QL-SETUP package, 25/32 internal, 3/16 external> #<The QL-ALLEGRO package, 0/16 internal, 6/16 external> #<The QL-DIST package, 110/256 internal, 81/256 external> #<The COMM package, 1053/4096 internal, 949/1024 external> #<The MP package, 921/1024 internal, 209/256 external> #<The REG package, 41/64 internal, 0/4 external> #<The LOOP package, 247/256 internal, 3/4 external> #<The QL-DIST-USER package, 0/16 internal, 0/16 external> ...)

CL-USER 18 > (set-difference * ***)
(#<The FOO package, 0/16 internal, 0/16 external>)

因此,您发现在两个软件包列表之间,引入了一个软件包FOO

另请注意,USE-PACKAGE不一定是有用的。 USE-PACKAGE将导出的符号导入当前包中。这可能有效,也可能无效。它可能导致任意符号名称冲突。

答案 1 :(得分:2)

不,没有。通常,如果不阅读其文档以了解如何使用它,则无法加载项目。

不幸的是,有时唯一的文档就是代码本身。 Slime有助于使用M-.探索代码,但您必须知道从哪里开始。