3

我正在学习 Lisp (SBCL),我对 lisp 代码的结构感到困惑。我相信 Lisp 包就像 Python 的模块?

我想做这样的事情。

实用程序.py:

def foo():
    print "And there is silence!"

主要.py:

import utilities as u

u.foo()

我查找了包、加载和 asdf 系统。我仍然不明白这一切是如何结合在一起的。

4

3 回答 3

3

关于与 Python 的比较:

包是 CL 中与 Python 模块最相似的东西,因为两者都是命名空间。系统和系统工具(如 ASDF)更类似于 Python 中的 Distutils 和 Setuptools。

Python 模块和 CL 包之间最重要的区别:包独立于文件和目录。相反,您可以使用defpackage创建包并将use-package以下代码放入特定包中。还有其他与包相关的操作符,但它们大多是用于交互使用的,这两个是源文件中最重要的。

请参阅Practical Common Lisp 中的相关章节以获取更多详细信息。

于 2011-02-17T14:07:06.273 回答
2

包是符号的命名空间。可以从符号导入和导出符号。一个符号可能包含在一个包中。包可以被其他包使用。

程序被构造成系统。系统是文件、依赖项、构建规则、默认信息等的集合——取决于所使用的系统工具。ASDF 就是其中之一。然后通过加载系统来加载库。系统也可以编译、打印、...

包和系统相互独立,不相关。

对于每个较大的软件、库或程序,使用一个或多个自定义包是有意义的。这样可以避免名称与其他加载软件中的符号发生冲突。

于 2011-02-16T20:10:51.520 回答
2

如前所述,与其他语言相比:

  • 对应命名空间
  • 系统对应于模块(即代码集合)。

关于包:为了了解这些(这是避免符号冲突等所必需的),我强烈建议阅读 Ron Garret 的Complete Idiot's Guide to Common Lisp Packages

于 2011-02-17T15:35:49.210 回答