lisp - 如何定义和使用 Common Lisp 包(库)?

标签 lisp package common-lisp quicklisp asdf

我在几个 Lisp 源文件中开发了一些 Common Lisp 函数,我希望这些函数可以轻松用于我编写的其他函数,或者如果我认为它们对其他人有用,可以在 github 上使用。现在,我只是将它们放在一些预定义的文件夹中并使用 (require "/path/to/my/modules/module.lisp")

我想了解定义 Lisp 模块库的正确(规范 Lisp)方法是什么。问题的第二部分是如何使用它们(我是否定义了它们,或者我是否从别人那里获得了它们)。

我已经阅读了很多有关 defpackagedefsystem 以及 asdf 的内容。但是我读过的所有内容似乎都集中在这个任务的宇宙的某个特定角落。我很难看到自定义模块创建、部署和使用的全局。因此,假设我面前有 Lisp 环境(CLISP 或 SBCL)和一个或多个 .lisp 文件,我想从中制作一个包或库,某处是否有文档解释需要什么步骤才能做到这一点?这可能是我已经读过的东西,但由于不了解上下文而没有跟踪。我所读到的关于 ASDF 的内容似乎在功能上就是我所追求的,但我不明白 ASDF 是否是我唯一的选择,或者它是否恰好是一个事实上的标准并且大多数其他人使用什么,或其他什么。我在 SBCL 中试了一下,但不确定我是否正确使用了它,也没有看到有关如何在 CLISP 中进行设置的信息。因此,我想了解什么是完成这项任务的中上层普通方法。

我知道这是一大堆草率的子问题。同样,如果有一些好的引用资料可供查看,我可以阅读。我只是很难全面了解这应该如何工作,是否有任何“最佳”方法,或者在 Lisp 中,它是否有点像“狂野西部”选择图书馆- 经理 - 你喜欢的方法。我做了 Google 的事情并阅读了任何看起来相关的东西,但我的大脑因所有这些而旋转。

谢谢。

最佳答案

系统 是文件和子系统的集合。可以编译或加载这样一个系统。还有其他可能的操作。它跟踪依赖关系并尝试做最少的工作。

如果您使用的是 SBCL 和 CLISP,则 ASDF 是可供选择的工具。参见 http://www.cliki.net/asdf

ASDF 提供了一个 DEFSYSTEM 宏来描述此类系统。

不要使用PROVIDE/REQUIRE——除非你知道自己在做什么。 ASDF 是必经之路。

要发布您的代码并使其易于被其他人加载,请使用QUICKLISP。请参阅:http://www.quicklisp.org/beta/

关于lisp - 如何定义和使用 Common Lisp 包(库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952909/

相关文章:

emacs - 为什么 elisp 局部变量在这种情况下保持其值?

package - 如何创建一个简单的 debian 包(只需压缩/提取源代码或任何带有 debian 打包的文件)

lisp - Common LISP代码解释

switch-statement - 通用Lisp中的字符串开关

scheme - 尝试在 Scheme/Racket 中构建列表

lisp - 声明Lisp函数 'pure'是否会有所帮助?

java - 在命令行指定的包中运行所有 TestNG 测试

lisp - 从列表 [Common Lisp] 返回唯一项的递归函数

lisp - 访问 Common Lisp 中的事件符号表

linux - KeeWeb 桌面安装错误