Common lisp 如何避免为公共lisp项目加载多个asdf文件?
在阅读Peter Seibel的《实用通用Lisp》一书时,我在理解如何结合Emacs的SLIME和quicklisp处理通用Lisp包系统时遇到了一些困难。他提供的项目具有以下结构:Common lisp 如何避免为公共lisp项目加载多个asdf文件?,common-lisp,slime,quicklisp,Common Lisp,Slime,Quicklisp,在阅读Peter Seibel的《实用通用Lisp》一书时,我在理解如何结合Emacs的SLIME和quicklisp处理通用Lisp包系统时遇到了一些困难。他提供的项目具有以下结构: 包com.gigamonkeys.spam中的spam.lisp,它依赖于另外两个包cl-ppcre和com.gigamonkeys.pathnames com.gigamonkeys.pathnames包中的pathnames.lisp spam.asd,它描述了com.gigamonkeys.spam包的依
- 包
中的com.gigamonkeys.spam
,它依赖于另外两个包spam.lisp
和cl-ppcre
李>com.gigamonkeys.pathnames
com.gigamonkeys.pathnames包中的
pathnames.lisp
,它描述了spam.asd
包的依赖关系com.gigamonkeys.spam
,它描述了pathnames.asd
包的依赖关系com.gigamonkeys.pathnames
C-x C-k
)编译并加载pathnames.asd
文件(asdf:operate'asdf:Load op'spam)加载com.gigamonkeys.pathname
包
(ql:quickload“cl-ppcre”)
来加载cl-ppcre
包spam.asd
文件(asdf:operate'asdf:Load op'spam)加载com.gigamonkeys.spam
包
spam.lisp
)中定义的函数所需的工作量似乎太大了,我一定是做错了什么。是否有一些方法可以用更少的命令来加载spam.lisp及其依赖项?
长话短说,包裹是一袋袋的符号和系统
文件和其他系统之间的关系
因此,这里使用您的结构是一个简单的系统定义:
(asdf:defsystem #:spam-filter
:serial t
:description "Simple Spam Filter"
:author "PCL"
:depends-on (#:cl-ppcre
#:com.gigamonkeys.pathnames)
:components ((:file "package")
(:file "spam")))
现在,我假设系统com.gigamonkeys.pathnames
处于
~/src/lisp/com/gigamonkeys/pathnames/
和中的垃圾邮件过滤器
~/src/lisp/spam filter/
slime
RET(push(truename“)asdf:*中央注册表*)
(push(truename“)asdf:*中央注册表*)
(ql:quickload:spam-filter)
~/quicklisp/localprojects/
中。您可以存储代码
没有或使用符号链接
附言:你可以找到
一条让我写作的捷径,addRET
而不是(push(truename“)asdf:*中央注册表*)
在另一个快捷方式的下方快速加载系统。
(,ql
一些系统名称
RET)一点术语:
- a是常见的Lisp标准功能。包是符号的名称空间。没别的了。它不是一个文件,不是一个模块,不是一个库,也不与任何这样的东西相关联。它甚至不是函数、变量或类的名称空间。只是为了象征。有一种惯例是将设置包的定义放入自己的文件中。但这只是一个惯例
- 系统用于定义、加载和编译组成软件库或应用程序的所有文件。系统的概念很古老(超过三十年)。(另一个系统定义工具)是该思想的流行和免费实现。肯特·皮特曼在1984年写了一篇关于
请参阅ASDF手册:对于延迟将其标记为正确,我深表歉意,但这正是我想要的。谢谢你的清楚解释!