Common Lisp 新手指南

来源:互联网 发布:萧技网络电视台 编辑:程序博客网 时间:2024/05/21 09:28

译自:The newbie guide to getting started on Common Lisp


Common List 新手指南


       开始进行Common Lisp编程可能让你怯步,即便对于有经验的程序员也是这样的。Common Lisp语言很优雅也很强大,然而它很难接触,没有人们通常理解的学习的切入点(starting point)。

       本文暂时还在完善之中,不过,希望它让你的Common Lisp新手学习之旅一开始没那么垂头丧气。


了解Common Lisp

         维基百科上的Common Lisp词条全面得让人吃惊。

        Ariel Labs上有一份关于Common Lisp的合理的编程风格指南。

        HyperSpec上有关于Common Lisp语言的完整文档。

        CLQR 上有关于Common Lisp的很好的可下载的快速参考的小册子。

        L1sp.org 是一个关于Common Lisp文档的重定向服务。


认识你的工具


Emacs

        Emacs 是非常权威的使用Lisp工作的编辑器。它也是唯一允许针对Lisp进行实时开发的编辑器。看一下David O'Toole 用Emacs制作的小游戏lightning talk ,还有他的Blocky.io 游戏开发系统,了解下Emacs在实时开发过程中的案例。非常酷是吗?


Steel Bank Common Lisp (SBCL)

       虽说有很多不同种的可用的Common Lisp实现程序, SBCL 是现在使用的非常标准的实现。它被人们积极地开发着,拥有合适的调试器,本地线程和多平台支持。  


Quicklisp

        Quicklisp 让使用丰富的Common Lisp社区开发库编程变得容易。它允许你只使用几个简单的命令来下载、安装和加载超过700多种库,同时Quicklisp已经完全代替它的前身 ASDF-Install 。如果你熟悉RubyGems ,Quickload和它很类似。


CL-Project

        CL-Project 可以为遵循最佳实践的Common Lisp语言引导出新的工程。 虽然说这样的工程未必是必需的,但是在你创建一个工程时它确实提供了一个合理的切入点(starting point)。


Buildapp

        Buildapp 使通过SBCL创建可执行程序变得简单了。


ASDF

        ASDF 允许你定义工程的结构和依赖关系。你可以把它看成Ruby里的Rake和Gemfile的混合体(注:没接触过Ruby,个人认为说成Makefile更便于我们理解)。



构建第一个程序

       我把获取Emacs和SBCL的任务留给你,你可以找到它们的Linux、Windows和MacOS版本。



安装Quicklisp和SLIME

$ curl -O http://beta.quicklisp.org/quicklisp.lisp$ sbcl --load quicklisp.lisp 
(quicklisp-quickstart:install)(ql:add-to-init-file)(ql:quickload "quicklisp-slime-helper")
       现在编辑你的Emacs配置来自动加载SLIME。

                                                        "~/.emacs"(load (expand-file-name "~/quicklisp/slime-helper.el"))(setq inferior-lisp-program "sbcl")


建立应用程序

       加载Emacs,然后键入 “M+X slime” ,按回车键。 现在你应该能看到REPL,一个交互的lisp提示符。(注:Emacs里M指键盘上的Alt键,C指Ctrl键,如M+x即Alt+x组合键盘)

                                 Createing the skeleton for your project(ql:quickload "cl-project")(cl-project:make-project #p"~/myapp"  :author "Your name"  :email "your@email.com"  :license "BSD or whatever")(ql:quickload "myapp")(in-package :myapp)

       代码里的cl-project 可能会生成一个关于版本号的警告。现在你可以忽略它,过一会儿在新生成.asd文件里修改它,比如改成“0.1”。

       现在在emacs的命令行里键入“M+x cd”,然后回车,emacs将提示你修改默认路径,键入你的工程名“myapp”,再按回车,此时进入了工程的根目录,接下来键入“c+x c+f",接着输入”src/myapp.lisp",回车后你应该能看到新创建的myapp.lisp的文件内容,代码写的非常好。(注:命令中的/src 目录和myapp.lisp 是cl-project工具自动生成的)

       让咱们向文件里加入些内容试试!

(defun hello-world ()    (format t "Hello world.~%))
       现在我们把这段代码输入到REPL里,然后把光标放到函数的末尾,然后按组合建“C+c C+c”(注:即“ctrl+c ctrl+c”),转换到REPL下,键入(hello-world),开始准备执行我们的新函数吧。

       恭喜你!你正在用Common Lisp编程。


重启Emacs后重加载你的程序

        CL-Project在运行时修改了当前的加载路径,以确保第一次可以容易地加载应用程序。

       你有三种方式把你的应用程序放回到加载路径中去。

  1. 把应用程序放到当前路径,从应用程序所在的路径启动Emacs或者在Emacs加载slime之前切换到应用程序路径。
  2. 把你的应用程序放到“~/quicklisp/local-projects”路径,这样程序可以始终被找到。
  3. 把你的应用程序放到加载路径中。

       个人建议,对于应用程序使用第一个办法,对于库使用第二个办法。


构建可执行程序

       虽然说对于Common Lisp编程来说构建可执行程序确实不是必需的,但是对于我们独立发布的程序来说却是很方便的。我们生成的可执行程序将内嵌完整的lisp运行环境,所以不要对二进制文件的大小太过惊讶。

       首先,为我们的可执行程序定义一个程序入口。(注:我把它放在了myapp.lisp文件的最下方,hello-world函数之后)

(export 'main)(defun main (args)  (hello-world)  (cl-user::quit))
       你需要下载并安装 buildapp 工具,下载地址在它的网站上有。

       现在开启终端,在命令行下切换目录到myapp工程根目录下,键入以下命令:

buildapp --asdf-tree ./ --load-system myapp --entry myapp:main --output hello

       然后执行该程序,

./hello
       将会输出:Hello world.


接下来做什么?

            Practical Common Lisp (即实用Common Lisp编程)提供了对Common Lisp的详细介绍,它也是我的入门书籍。(注:以上两个地址分别对应中文版和英文版)
            Common Lisp the Language, 2nd Edition(即 Common Lisp语言 第二版)是最具权威性的Common Lisp书籍。(注:pdf版下载地址)

            On Lisp (即 On Lisp -- Common Lisp高级编程) 提供了关于高级Lisp级数的全面的学习内容。

            Land of Lisp 即有趣,阅读起来也很开心。(注:本书用编写小游戏的方式让读者学习Common Lisp编程,很有意思。目前无中文版,它的pdf版下载地址)


 修改历史          

       2012-06-26下午2:39: 加入如何把slime放入加载路径的描述。修正了生成可执行文件时main函数的导出。增加了“loading your app after restarting emacs”一节。

       2012-06-26下午2:52: 加入更多书籍和引用


                                                                                                                                                                          Lori Holden 写于2012年6月24日

                                                                                                                                                                                  (在此感谢原作者)

原创粉丝点击