长话短说,软件包是符号的集合,系统描述了文件和其他系统之间的关系。
因此,使用您的结构,这里是一个简单的系统定义:
(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:*central-registry*)
(push (truename ".") asdf:*central-registry*)
(ql:quickload :spam-filter)
~/quicklisp/local-projects/
中来将您的系统放入Quicklisp的搜索路径。您可以在那里存储代码或使用符号链接。
PS:你可以在这里找到一个史莱姆快捷方式,使我能够写,addRET而不是(push(truename“。”)asdf:* central-registry *)
。
而且正下方还有另一个史莱姆快捷方式,用于快速加载系统。
(,ql某些系统名称
RET)
一些术语:
包是Common Lisp的一个标准特性,用于将符号划分到命名空间中。这只是一个命名空间,不是文件、 模块、 库或任何其他东西的限制。它甚至不是一个功能、变量或类的命名空间,仅限于符号。约定俗成的做法是将设置包的定义放入自己的文件中,但这只是个惯例。
系统用于定义、加载和编译构成软件库或应用程序的所有文件。关于系统的概念已经有30多年的历史了。 ASDF(Another System Definition Facility)是该想法的一种常见且免费的实现。Kent Pitman在1984年写了一篇关于大型系统描述的文章。
这种系统工具的一部分是注册表,可以从其中找到所有系统。系统定义描述了它所包含的文件以及所有依赖的系统。通常,这种注册表是文件系统中的一个目录和/或在运行中的Lisp中的注册表(变量等)。
在加载特定系统时,系统工具会查找注册表以找到它,加载定义,递归加载所有所需的系统,然后加载所有文件。
请参阅ASDF手册:配置ASDF以查找您的系统