lur*_*ker 3 lisp common-lisp asdf package quicklisp
我已经在一些Lisp源文件中开发了一些Common Lisp函数,我希望这些函数可以轻松地用于我编写的其他函数,或者如果我认为它们对其他人有用,则可以在github上使用.现在,我刚刚将它们放在一些预先定义的文件夹中并使用(require "/path/to/my/modules/module.lisp").
我想要了解什么是正确的(规范的Lisp)方法来定义模块的Lisp库.问题的第二部分是如何使用它们(我是否定义了它们,或者我是否从其他人那里获得了它们).
我一直在阅读了很多关于defpackage和defsystem和asdf.但我读过的所有内容似乎都集中在这项任务的某个特定角落.我在查看自定义模块创建,部署和使用的大局方面遇到了很多麻烦.所以假设我面前有一个Lisp环境(CLISP或SBCL)以及一个或多个.lisp文件,我想制作一个软件包或库,是否有一个文件可以解释哪些步骤需要这样做?这可能是我已经读过的东西,但由于不理解上下文而没有跟踪.我所读到的关于ASDF的内容在功能上看起来似乎是我所追求的,但我不知道ASDF是否是我唯一的选择,或者它是否恰好是事实上的标准以及大多数其他人使用的,或者随你.我在SBCL玩了一下,并且不确定我是否正确使用它,并且没有看到如何在CLISP中设置它的信息.所以我想要了解什么是这个任务的中间,香草方法.
我知道这是一个庞大,草率的子问题.再说一次,如果有一些很好的参考资料,我可以阅读.我只是在查看它应该如何工作,以及是否有任何"最佳"方法,或者在Lisp中是否有点"狂野西部"选择图书馆时遇到一些麻烦 - 管理员 - 你喜欢的方法.我做谷歌的事情并阅读任何看起来相关的东西,但我的大脑正在全力以赴.
谢谢.
一个系统的文件和子文件系统的集合.可以编译或加载这样的系统.还有其他可能的操作.它跟踪依赖关系并尝试进行最少量的工作.
如果您使用的是SBCL和CLISP,则可以选择ASDF.见http://www.cliki.net/asdf
除其他外,ASDF提供DEFSYSTEM了描述此类系统的宏.
不要使用PROVIDE/ REQUIRE- 除非你知道你在做什么.ASDF是要走的路.
要发布您的代码并让其他人可以轻松加载,请使用QUICKLISP.见:http://www.quicklisp.org/beta/
Common Lisp 中的包与大多数其他意义上的包不同。它不是列表文件的存档,而更像是大多数其他语言所称的模块或命名空间,可让您从代码中选择要向外部代码世界显示的符号(名称)。
如果您的小库只有一个文件,则可以将其分发。如果您有多个文件,则可以使用 ASDF 等工具来确保定义宏的文件在使用这些宏的文件之前加载。
这里有一些很好的资源供您查看,这两章都来自Practical Common Lisp:
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |