can*_*ews 3 common-lisp slime quicklisp
在完成Peter Seibel的" Practical Common Lisp"一书时,我在理解如何与Emacs的SLIME和quicklisp一起处理Common Lisp包系统时遇到了一些困难.他提供的项目具有以下结构:
spam.lisp
在包中com.gigamonkeys.spam
,依赖于另外两个包,cl-ppcre
和com.gigamonkeys.pathnames
.pathnames.lisp
在包中 com.gigamonkeys.pathnames
spam.asd
,它描述了com.gigamonkeys.spam
包的依赖关系pathnames.asd
,它描述了com.gigamonkeys.pathnames
包的依赖关系我目前发现构建最终目标spam.lisp的唯一方法是:
pathnames.asd
使用SLIME(C-x C-k
)编译并加载文件com.gigamonkeys.pathname
通过(asdf:operate 'asdf:load-op 'spam)
在REPL 键入来加载包cl-ppcre
通过(ql:quickload "cl-ppcre")
在REPL 键入来加载包spam.asd
使用SLIME 编译并加载文件com.gigamonkeys.spam
通过(asdf:operate 'asdf:load-op 'spam)
在REPL 键入来加载包这似乎是使用单个文件中定义的函数所需的大量工作(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")))
Run Code Online (Sandbox Code Playgroud)
现在,我假设系统com.gigamonkeys.pathnames
在
~/src/lisp/com/gigamonkeys/pathnames/
,垃圾邮件过滤器
~/src/lisp/spam-filter/
.
slime
RET(push (truename ".") asdf:*central-registry*)
(push (truename ".") asdf:*central-registry*)
(ql:quickload :spam-filter)
由于Quicklisp依赖ASDF加载系统,因此您需要在ASDF搜索路径中添加系统目录.
您还可以将系统添加到Quicklisp的搜索路径中~/quicklisp/local-projects/
.您可以将代码存储在那里或使用符号链接.
PS:你可以在这里找到
一个粘液快捷方式,允许我写,addRET
而不是(push (truename ".") asdf:*central-registry*)
.
而在另一个粘液快捷方式下面快速加载系统.(,qlsome-system-name
RET)