據聞在最後一堂課時, 使用的 scheme 是 DrScheme (目前已更名為 Racket), 我沒有特別研究那個好, 只是這本書是 mit press, 我當然找 mit-scheme 來用, 書上也多少會提到 mit-scheme 有哪些 feature, 正好也是這本書的範例可以使用的功能。
其他的 Scheme implementations: http://community.schemewiki.org/?scheme-faq-standards#implementations
雖然有很多的 scheme 實作, 不過 4.1 的 metacircular evaluator 範例我在 guile, chicken 的 scheme 實作品上都無法順利執行, 若不想修改程式碼, 還是跑在 mit-scheme 比較保險。
這篇不是 scheme 的教學, 我都還不會怎麼可能寫得出教學文, 這只是在說明如何使用 mit-scheme 的開發環境和比較常用的功能。
想學 lisp 很久了, 這次就靠這本書來學習吧, scheme 也可以啦, 反正都是那種很多小括弧的東西。本書並不是專門用來教學 scheme, 只會提到範例程式中所需要的語法, 不過這樣也算夠用, 要深入的話還得參考相關 scheme 書籍。
如果要編譯 mit-scheme 可以從 http://www.gnu.org/software/mit-scheme/ 下載 Portable C 的版本, 我希望你不需要用到這招, 我在 gentoo 上需要這麼做, http://www.gnu.org/software/mit-scheme/liarc-build.html 這裡有編譯方法。
linux/debian 安裝還是用 apt-get:
apt-get install mit-scheme
windows 的安裝應該難不倒你, 你都挑了這麼冷門的東西來學, 應該和我一樣, 是個品味很特別的程式員。
最好也安裝一下說明文件, 這東西很冷門的, 幾乎找不到什麼網路教學文章, 自己 K 文件吧!
apt-get install mit-scheme-doc
執行: mit-scheme
descent@debian-vm:~$ mit-scheme
會跑出一個 mit-scheme 環境, 可以輸入程式碼, 結果會立刻跑出來, 很像 dos 下的 etbasic。
L12 就是我輸入的程式碼。
說真的, 我還真不習慣在一個 interpretation 環境下開發程式, 。
文件上建議使用 Edwin 來輸入 scheme 程式, edwin 很類似 emacs, 有除錯器的功能。
file:///usr/share/doc/mit-scheme-doc/html/mit-scheme-user/Edwin.html#Edwin
說明如何使用 edwin。
我敢打賭, 你要是沒用過 emacs, 絕對恨透了 edwin 這東西, 難用到暴。還是先回到 interpretation 環境下。
mit-scheme document
file:///usr/share/doc/mit-scheme-doc/html/mit-scheme-user/index.html
這文件最好先看一下, 要不然還真的不知道怎麼使用 interpretation 環境下的操作方式。
ctrl+c q exit mit-scheme
(exit) 也可以離開 mit-scheme。
(quit) 不是離開, 而是在背景執行 mit-scheme, fg 就可以把畫面叫回來。
(load "filename.scm")
可以載入一個 scheme 檔案。
4.1 Compilation Procedures
file:///usr/share/doc/mit-scheme-doc/html/mit-scheme-user/Compilation-Procedures.html#Compilation-Procedures
(cf "foo")
不像 c compiler 一樣, 可以很乾脆的產生一個執行檔。他產生的 binary 只是讓 interpretation 環境載入用。
再回到開頭的 edwin, 它很難用, 不過我還是比較常用這個, 因為那個 interpretation 環境我覺得更難用。
file:///usr/share/doc/mit-scheme-doc/html/mit-scheme-user/Edwin-Scheme-Evaluation.html#Edwin-Scheme-Evaluation
會說明如何執行在 edwin 敲入的程式碼。簡單點就是在你要執行的程式碼後面按下 ctrl+x ctrl+e。
M-o 會計算檔案中所有的 express。
edwin 很類似 emacs, 所以連按鍵都很類似。
ctrl+x ctrl+f 可以載入檔案。
ctrl+x ctrl+c 離開 edwin。
ctrl+x ctrl+s 存檔。
C-@ mark
C-x C-x 可以查看 mark 的位置, 不知道意思的話, mark 完之後一直按 C-x
M-w copy
C-w delete
C-x b switch buffer
C-x k kill buffer
C-x o 切換 window
C-x 2 分割成兩個 window
C-x 0 (數字0) 關掉游標在的那個 window
edwin REPL mode:
M-x repl 可進入 REPL mode
這東西太冷門了, 希望有人因為我這篇文章一起來學習 scheme。
scheme compiler: CHICKEN Scheme, 這東西可以產生一個獨立的執行檔, 真是太酷了。
用 apt-get 搞定它。
apt-get install chicken-bin
編譯用法:
http://wiki.call-cc.org/man/4/Using%20the%20compiler
最簡單的用法, 來個階乘測試:
csc factorial_1.scm descent@deb64:3.1.3$ ./factorial_1 120
要先產生出 c souce code 也行, 文件拉到最下方, 麻煩多了。
mit-scheme 教學:
- http://faculty.csie.ntust.edu.tw/~ywu/cs4001301/MITScheme_tutorial.pdf
- http://faculty.csie.ntust.edu.tw/~ywu/cs4001301/Scheme_tutorial.pdf
- Simply Scheme, second edition
- The Little Schemer book
- http://www.cs.rpi.edu/academics/courses/fall05/ai/scheme/starting.html
- Scheme 語言概要(上/下):
http://www.ibm.com/developerworks/cn/linux/l-schm/index1.html
http://www.ibm.com/developerworks/cn/linux/l-schm/index2.html - http://blog.csdn.net/zzulp/article/category/682234
- MIT Scheme 的基本使用:
http://www.math.pku.edu.cn/teachers/qiuzy/progtech/scheme/mit_scheme.htm
ref:
as script:
http://snippets.dinduks.com/mit-scheme-run-a-script
http://vepa.in/technology/mit-scheme-unix-scripts-and-cgi
scheme < script.scm | grep ";Value:" | sed "s/;Value: /Result: /" scheme-run () { scheme < $1 | grep ";Value:" | sed "s/;Value: /Result: /" }
Petite Chez Scheme (從 Scheme 编程环境的设置得知, 據說效能很好):
http://scheme.com/download/index.html#sec:petitechezscheme
為了讀 SICP 特別碰 mit-scheme 其實沒有必要,用一些比較現代的 Lisp 也是可以的,像是 Clojure,網路上這方面資源不少,可 google「sicp clojure」
回覆刪除謝謝你的資訊。clojure 原來也是 lisp 系的語言。
回覆刪除