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.pathnamesspam.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/.
slimeRET(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-nameRET)