Common Lisp 新手指南

譯自: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 "[email protected]"
  :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日

                                                                                                                                                                                  (在此感謝原作者)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章