2010年2月18日 星期四

Practical Common Lisp - ch2 Lather, Rinse, Repeat: A Tour of the REPL

http://gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html

摘要

  • Common Lisp 不像其它語言由少數人或組織推動, 只有由 ANSI 制定標準, 大家再各自實作功能。有點像 W3C 定了 HTML 4, 但各家瀏覽器各做各的, 雖然有共通語法, 但共通語法也可能有不一致的行為, 另外又有各家自訂的語法, 相容問題較為嚴重。如同 Plumm 所言, 或許這就是 CL 紅不起來的主因吧。
  • SBCL 是 CMUCL的延伸實作, 可以編成 native code 在 Linux 和 OS X 上執行, 並支援 Unicode。上篇提到的 PL benchmark, 也是用 SBCL 測。
  • 作者建議用 Lisp in a Box 和 SLIME (Emacs mode for CL) , 但身為一名 VIM 的愛好者, 這部份我就跳過啦 ( 其實是我不習慣頻繁地按 Ctrl 和 Alt )。

SBCL + VIM


這篇所言, VIM plugin Limp 是 CL + VIM 的最佳選擇, 提供 code completion、將 VIM 內的程式貼到 SBCL 以及切換到 SBCL 執行程式 (當作互動式直譯器) 等功能。照著官方文件說的做就是了, 安裝的摘要如下:
  1. download limp
  2. sudo aptitude install vim-full sbcl hyperspec rlwrap screen perl
  3. sudo ./install.sh  # 會把檔案裝到 /usr/local/limp, 並設 soft-link 指回 ~/.vim/ftplugin/lisp/ 下
  4. 編輯 ~/.vimrc 加上


    filetype plugin on


    autocmd BufRead,BufNewFile *.lisp so ~/.vim/ftplugin/lisp/limp.vim
官方文件沒提到第四步, 這兩個寫法的用意都是讓 vim 在開啟 *.lisp 檔時會載入 ~/.vim/ftplugin/lisp/limp.vim。

成功的話按 F12 就能在 VIM 和 SBCL 之間切換。按 F12 時會問一些問題, 在 "Name the Lisp" 時隨便輸入一個代名, 剩下按 ENTER 即可。我用的情況怪怪的, 有時連線後看到「Booting ...」就沒反應, 但實際上 SBCL 有跑起來。這時可以按 Ctrl + C 切斷連線, 再按 F12 重連一次。待看到「Connect to [boot new]:」時別急著按 ENTER, 改按 TAB 列出已啟動的 SBCL, 這樣就能連上剛啟動的 SBCL。

初步試用, 覺得下面這個流程挺好用的:
  1. 用 V 選起要執行的區塊
  2. 按 \ec 執行
  3. 按 F12 切到 SBCL 看結果

疑問

  • 常聽人說用 Emacs 寫 scripting language 很方便, Emacs 甚至自訂了一套 Lisp 方言。究竟 Limp 差 SLIME 多少呢? 

3 則留言:

  1. I'd actually encourage you to give SLIME a serious try.

    回覆刪除
  2. Ummm, I'll try it after I learn some basic syntax.

    回覆刪除
  3. It's LISP; what syntax is there to learn? ;)

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...