2010/06/25

Lisp + GNU Emacs + SLIME on Windows

上一篇講了GNU Emacs on Windows,其主要目的是為了這篇,安裝lisp系統與SLIME,on Windows。

首先是安裝lisp系統的部份,如果要從原始碼自行編譯的話,那會較困難,所以我通通使用已經打包好的套件。雖然只要一套實作即可,但我安裝了三個(CLISP、SBCL、CCL),這是為了試試看比較不同實作的差異,你不一定要這樣。

下面的鏈結是我使用的版本,你可以造訪官方網頁看看有沒有較新的版本。

首先是目錄的問題,太長或有空格都有可能會出問題,因為Emacs、lisp都有很深的unix背景,所以我新增了這些目錄:
C:\home
C:\home\bin
C:\home\bin\emacs (GNU Emacs放在這)
C:\home\yehnan (我的使用者家目錄)

開始下載安裝吧。

第一:CLISP (GNU CLISP)
在網頁上找到給Windows使用的套件,clisp-2.48-win32-mingw-big.exe(3.9 MB)。
我安裝在C:\home\bin\clisp下。安裝套件會增加這個路徑到環境變數PATH中。

有個小問題,安裝後執行,“找不到svm.dll”,解決方法是把libsvm\svm.dll拷貝到full\下即可,原因大概是Windows沒有symboloc link這種東西。

註:clisp-2.49-win32-mingw-big.exe修正了這個小問題。

執行後看到這個畫面就表示成功了。


第二:SBCL (Steel Bank Common Lisp,從CMUCL分支出來)
在網頁上找到給Windows使用的套件,sbcl-1.0.37-x86-windows-binary.msi(10 MB)。
我安裝在C:\home\bin\sbcl下。安裝套件會增加這個路徑到環境變數PATH中,並且新增一個環境變數SBCL_HOME指向這個路徑。

執行後看到這個畫面就表示成功了。

第三:CCL (Clozure CL,前身為OpenMCL)
在網頁上找到給Windows使用的壓縮檔,ccl-1.5-windowsx86.zip(34 MB)。
我解壓縮安裝在C:\home\bin\ccl下。

執行C:\home\bin\ccl\wx86cl.exe後得到這個畫面就表示成功了。

哇,很簡單嘛,lisp系統的部份已經搞定了。接下來就是安裝與設定SLIME。


SLIME全名為Superior Lisp Interaction Mode for Emacs,顧名思義,是一個Emacs的擴充套件(外掛),專門用來輔助寫lisp程式。包括一個slime-mode(minor mode)用來增強Emacs原有的lisp-mode,一個比較好用的REPL(read-eval-print-loop),SLDB(debugger),以及其他輔助工具。

怎麼取得呢?要用cvs指令,最好不要抓取一些網路上的壓縮檔(官方或非官方),因為那些可能都太舊了。
cvs -d  :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co  slime
怎麼安裝呢?把上面取得的整個slime目錄放進Emacs的load-path有設定的地方,我放在C:\home\bin\emacs\site-lisp\slime\

怎麼設定呢?這就困難了。
首先在C:\home\bin\emacs\site-lisp\新增檔案site-start.el,內容是
(setenv "HOME" "C:/home/yehnan/")
。因為Emacs預設的家目錄會是類似這種的C:\Documents and Settings\Username\Application Data,太長且有空格,所以改掉。

然後是在C:\home\yehnan\新增檔案.emacs,各種設定都會放在這裡。什麼,你沒辦法新增一個開頭是小數點"."的檔案?使用Emacs新增吧,其實Windows是容許這種檔名的。然後編輯,加入以下的內容:
;pathname of Lisp executable file, to run an inferior lisp process
(setq inferior-lisp-program "C:/home/bin/clisp/full/lisp.exe -B C:/home/bin/clisp/full -M C:/home/bin/clisp/full/lispinit.mem -ansi -q")

(add-to-list 'load-path "C:/home/bin/emacs/site-lisp/slime/")
(require 'slime)
(slime-setup '(slime-fancy))

以分號開頭的是註解。
inferior-lisp-program那一行,是設定你的lisp的執行檔與參數。參數是從網路上找來的
load-path那一行,將slime的路徑加入。
require跟slime-setup那兩行,是要Emacs載入SLIME。詳情可看這裡

怎麼執行呢?在Emacs下鍵入M-x slime(M代表Alt鍵,M-x表示按著Alt不放,然後按x,然後輸入slime,按Enter)。如果沒問題,應該就會看到以下的畫面。

這是SLIME的REPL,你可以看到buffer的名字是*slime-repl clisp*,在這裡就可以輸入各種lisp expression並作evaluation了,REPL的指令請看這裡

剛剛執行M-x slime,slime會進行以下的動作,先啟動在.emacs設定的lisp系統(在Emacs->Buffers會看到一個*inferior-lisp*);還有一個叫做"Swank"的server,並建立起Swank跟inferior lisp之間的連線,然後開啟一個REPL。

恭喜你,已經有完整的lisp開發環境了。

對了,剛剛不是裝了三套lisp系統嗎?
請在.emacs把inferior-lisp-program那一行換成這個:
(setq slime-lisp-implementations
'((clisp ("c:/home/bin/clisp/full/lisp.exe" "-B" "c:/home/bin/clisp/full" "-M" "c:/home/bin/clisp/full/lispinit.mem" "-ansi" "-q"))
(sbcl ("sbcl"))
(ccl ("C:/home/bin/ccl/wx86cl.exe"))
))

如果直接打M-x slime,預設會執行第一個lisp系統,也就是clisp。
如果打M-- M-x slime,然後輸入clisp or sbcl or ccl,就會執行指定的lisp系統。

哇,好棒,想開始使用SLIME的slime-mode有哪些指令可以用,就看這裡吧

參考文件:
1. Installing CLISP, Emacs, and SLIME on Windows XP from What’s In Peter’s Head。
2. Installing SBCL, Emacs, and SLIME on Windows XP from What’s In Peter’s Head。
3. SLIME User Manual from the offical website.
4. SLIME-HOWTO from Cliki

學習lisp :
1. Practical Common Lisp by Peter Seibel
2. The Common Lisp Cookbook
3. Structure and Interpretation of Computer Programs video lectures by Hal Abelson and Gerald Jay Sussman
4. Berkeley The Structure and Interpretation of Computer Programs by Satish B Rao and Brian HARVEY

No comments:

Post a Comment