QuickLisp常用命令

QuickLisp作为Common Lisp的包管理嚣,給CL开发带来极大方便。记下常用命令以备忘。

 加载

(ql:add-to-init-file)

。升级quicklisp本身
(ql:update-client)

 

。更新系统

(ql:update-dist "quicklisp")

 

。查找系统

(ql:system-apropos "vector")

 

。装载/安装软件
(ql:quickload "quicklisp-slime-helper")

 

。缷载软件

(ql-dist:uninstall (ql-dist:release "babel"))

(ql-dist:clean (ql-dist:dist "quicklisp"))

 

。查看已安装软件

(ql-dist:installed-releases (ql-dist:dist "quicklisp"))

(ql:where-is-system "cl-ppcre")

(ql:register-local-projects)


;:dist-url can be used to specify the initial dist version to use at installation time. Valid URLs can be obtained from an existing Quicklisp installation by evaluating one of the new functions (ql:dist-url "quicklisp") or (ql:available-dist-versions "quicklisp")

;:client-url can be used to specify the initial client version to use at installation time. Valid URLs can be obtained from an existing Quicklisp installation by evaluating one of the new functions (ql:client-url) or (ql:available-client-versions)

 

 

如果用Common Lisp(以下简称CL)编写大型程序的话,肯定会遇到如下两个问题:
1,多个源文件如何组织,编译和依赖。
2,如何引入其他的Lisp软件包。
这就不得不引入ASDF和Quicklisp两个工具了。

项目构建工具-ASDF
      ASDF是Another System Definition Facility的缩写。这个名字够个性(程序员都知道为什么)。ASDF用来描述Lisp源文件之间的相互依赖关系,进而保证程序的各个部分能够按照正确的顺序进行编译、加载、测试等等。可以近似地把ASDF看作编写C语言程序时所用到的GNU Make工具和Java的Ant工具。ASDF最新已经发布了ASDF 2,ASDF 2指的是2.000及以后的发布版本;1.656到1.728之间的发布版本是ASDF 2的开发版;ASDF 1指的是1.369之前的版本。

  许多Lisp实现都包含了ASDF,可以使用Common Lisp的require函数加载ASDF模块:(require :asdf)或(require 'asdf)(我所使用的SBCL 1.0.40和Clisp 2.48在启动的时候都会自动加载ASDF模块,因此无需手工加载)。可以使用(asdf:asdf-version)函数查看ASDF是否加载成功,如果此函数引发一个异常,那么要么ASDF没有加载成功,要么正在使用的是ASDF 1的较旧的版本。如果Lisp实现中没有包含ASDF,可以使用(load "/path/to/asdf.lisp")手动加载ASDF。
     具体的使用方法 参考2 有介绍。不多说了。
      另一个工具是MK-DEFSYSTEM(http://www.cliki.net/mk-defsystem),不过使用没有asdf流行。 有些Common Lisp实现也有它们自己的系统构建支持。

Lisp依赖包管理工具-Quicklisp
     
     Quicklisp是Common Lisp的库管理工具。按照其官方介绍:Quicklisp支持数十种主流的CL实现,并且提供超过700个包(库)的下载,安装,管理和加载。个人认为Quickliap类似于ubuntu的apt工具或者java的maven工具。实现(库)包的依赖管理。

  安装quicklisp
开启一个lisp shell,并包含此文件。
$ sbcl --load quicklisp.lisp
然后安装quicklisp
* (quicklisp-quickstart:install)
然后你需要在每次启动sbcl或者clisp的时候自动加载quicklisp
* (ql:add-to-init-file)
搜索软件包,类似于apt-cache search。例如搜索带有vector的lisp库,注意字符串两旁的双引号。
* (ql:system-apropos "vector")
安装软件包
* (ql:quickload "lib-name")
升级所有安装了的lisp库
* (ql:update-all-dists)
升级quicklisp本身
* (ql:update-client)
quicklisp系统概览
安装之后,quicklisp会在系统的home目录下新建一个quicklisp目录,所有的文件和库都放在这个地方。

存在的问题:

(ql:system-apropos "socket")

The interpreter showed an error which was,

No address associated with hostname (error #-5) during socket creation or nameserver operation in gethostbyname
   [Condition of type CCL:SOCKET-CREATION-ERROR]

这个问题浪费了我半天的时间,最后才发现beta.quicklisp.org无法访问的原因,试用了代理直接访问,发现网站是没有问题了。不用说,肯定是伟大的GFW在作怪吧。

quicklisp和asdf的关系 
How is Quicklisp related to ASDF?
Quicklisp has an archive of project files and metadata about project relationships. It can download a project and its dependencies. ASDF is used to actually compile and load the project and its dependencies.
ASDF is a little like make and Quicklisp is a little like a Linux package manager.
quicklisp使用了asdf处理库文件之间的依赖关系。但是用户并不需要直接使用asdf本身,因为quicklisp类似于ubuntu的apt,而asdf类似于makefile。Quicklisp记录工程文件存档和工程之间的关系。Asdf编译工程和加载工程的依赖。
总结

关于asdf使用的具体介绍就等下篇文章了。



参考:
[1] 用 sbcl, asdf 和 cl-launch 编写可分发的 lisp 程序  -冰河伞哥 http://tianchunbinghe.blog.163.com/blog/static/7001200692314249376/
[2]  ASDF Manual  ---http://common-lisp.net/project/asdf/asdf.html#Loading-ASDF
[3]  http://basiccoder.com/constructing-common-lisp-package-by-asdf.html
【4】Quicklisp web sites  http://www.quicklisp.org/beta/index.html
【5】http://www.cnblogs.com/unionx/articles/quicklisp-intro.html
【6】https://news.ycombinator.com/item?id=3809098

posted @ 2015-04-03 23:22  果丁  阅读(1358)  评论(0编辑  收藏  举报