Scheme Language
簡介
Scheme 是什么?
Scheme 是一種小巧而強(qiáng)大的程序語言。
Scheme 是小巧的,強(qiáng)大的,優(yōu)雅的
Scheme 是 LISP 的一種方言,它繼承了 LISP 的優(yōu)點(diǎn)。這里對 Scheme 的描述大部分也適合其它 LISP 方言。
Scheme 不但設(shè)計(jì)非常干凈,而且非常強(qiáng)大。說它小巧是因?yàn)樗挥?種最基本的語法結(jié)構(gòu),甚至連循環(huán)語句都沒有。它的核心語法用幾頁紙就可以全部敘述完畢。Scheme 的 report 只有 50 多頁,還沒有某些語言手冊的索引長。你可以在這里下載一個(gè) Scheme Report 的 PDF 版本。
然而這種看起來簡單小巧的語言是那樣的強(qiáng)大!
Scheme 可以可以實(shí)現(xiàn)幾乎所有我們所知道的程序設(shè)計(jì)方法。函數(shù)式,強(qiáng)制式,消息傳遞式,邏輯式,…… 在 Scheme 里,所有的過程都可以被當(dāng)成數(shù)據(jù)操作,而且它可以把通常隱藏在幕后工作的 continuation 作為對象來操作。
Scheme 可以實(shí)現(xiàn)優(yōu)秀的軟件工程。用 Scheme 編程可以擺脫普通語言的“計(jì)劃—實(shí)現(xiàn)”的設(shè)計(jì)流程,而使用自底向上的設(shè)計(jì)方法。也就是說,你不需要在設(shè)計(jì)程序之前做好所有的計(jì)劃。Scheme 語言隨著問題改變,語言和問題都向著對方生長,最后達(dá)到一個(gè)完美的結(jié)合點(diǎn)。
Scheme 是非常優(yōu)雅的,它具有數(shù)學(xué)的美感。Scheme 從一開始就被設(shè)計(jì)為一種通用的程序語言。它不是為了解決某個(gè)特殊的小問題的設(shè)計(jì),不是功能堆砌在功能之上,最后搞的不可理解的語言。
Scheme 是穩(wěn)定的。Scheme 注重的是“質(zhì)量”,而不是工業(yè)上的利用價(jià)值,所以 20 年來 Scheme 基本上沒有變化。你不用擔(dān)心有一天收到這樣煩人的消息:“我們鼓勵大家使用 'Scheme2004' 的語法。” Scheme 的語法就像象棋的規(guī)則,一旦知道這個(gè)規(guī)則,剩下需要做的就是考慮怎樣取得勝利。
Scheme 特別適合描述算法。用 Scheme 編程序,你可以專注于設(shè)計(jì)算法本身,而不是為語言本身的事情而煩惱,比如語法,內(nèi)存泄漏之類。所以用這種語言教學(xué),學(xué)生可以學(xué)會“解決現(xiàn)實(shí)世界的問題” 而不是困惑于 “電腦自己的問題”。學(xué)生會很快的理解到“計(jì)算” 的實(shí)質(zhì)內(nèi)涵,深刻體會到計(jì)算科學(xué)是什么。
Scheme 被很多大學(xué)用于各個(gè)領(lǐng)域的計(jì)算機(jī)教學(xué),甚至一些中學(xué)和小學(xué)也開始利用 Scheme 來講授計(jì)算科學(xué)。令人驚奇的是一些 10 歲小孩可以用 Scheme 寫出 Don Woods 的 adventure 游戲。
使用 Scheme 作為教學(xué)工具的一個(gè)明顯的特征就是,Scheme 語言本身從來不會成為學(xué)習(xí)的重點(diǎn)。使用 Scheme 作為工具的課程從來不會專門講授 Scheme,因?yàn)闆]有這個(gè)必要。學(xué)生在初次接觸計(jì)算機(jī)的幾天里就能熟悉 Scheme,學(xué)習(xí)怎樣用它來計(jì)算。之后,大家就開始到處找問題來計(jì)算,不再考慮語言的問題了。Scheme 的理念是程序語言不是拿來“學(xué)”的,而是拿來“用”的。
Scheme 在教育界被如此廣泛的使用的結(jié)果就是,新一代的優(yōu)秀的計(jì)算學(xué)家,很多人的“母語”是 Scheme。
可以免費(fèi)得到的參考材料
Scheme 的社會是非常開放和自由的。所以你不用奇怪,最好的書都有免費(fèi)的版本 :)
- Structure and Interpretation of Computer Programs
昵稱 "The Wizard Book" 或者 "The Purple Book"。
Scheme 的鼻祖 Gerald Jay Sussman 和計(jì)算機(jī)教育專家 Hal Abelson 合寫的,20 年來影響整個(gè)計(jì)算機(jī)科學(xué)教育的著作,著名的 MIT 課程 6.001 的課本。這是 MIT 的電子工程和計(jì)算機(jī)科學(xué)專業(yè)本科生的必修課,其它與計(jì)算相關(guān)專業(yè)也鼓勵參加。每年上這門課的 MIT 學(xué)生超過 500 名。全世界有超過 100 所大學(xué)采用這個(gè)教材。這里有一個(gè)不完全列表。
它著重講述的不是 Scheme 語言本身,也不是數(shù)據(jù)結(jié)構(gòu)和算法。在簡短的介紹 Scheme 的簡單語法之后,課本馬上開始講述深入的計(jì)算概念:函數(shù)式程序設(shè)計(jì),高階函數(shù),數(shù)據(jù)抽象,流,數(shù)據(jù)制導(dǎo),消息傳遞,邏輯程序設(shè)計(jì),解釋器設(shè)計(jì),編譯器設(shè)計(jì),寄存器機(jī)器模擬……
這本書讓學(xué)生從一個(gè)語言設(shè)計(jì)者和實(shí)現(xiàn)者的高度來看待問題,而不只是作為一個(gè)普通語言的用戶。讀了這些內(nèi)容,學(xué)生可以真正體會到“計(jì)算科學(xué)”的實(shí)質(zhì)內(nèi)涵,而不是被一些細(xì)節(jié)束縛,只見樹木不見森林。
- Revised(5) Report on the Algorithmic Language Scheme
Scheme 語言的規(guī)范定義。它可以到這里下載。也可以在本地下載雙列 PDF 版本。
- The Scheme programming Language
R. Kent Dybvig 寫的一本書。深入的解析了 Scheme 語言。CPS, syntax-case,……在這里都有詳細(xì)的解釋。
- Teach Yourself Scheme in Fixnum Days
Teach Yourself Scheme in Fixnum Days 可以作為一個(gè)有使用其它語言經(jīng)驗(yàn)的程序員的教材,看這本書你可以很快接觸到 Scheme 獨(dú)一無二的強(qiáng)大特點(diǎn)。
- An Introduction to Scheme and its Implementation
一個(gè)深入的 Scheme 和 LISP 教材。適合 Scheme 解釋器,編譯器的設(shè)計(jì)者。
- The Scheme Programming Language ,一個(gè)幻燈片。一目了然的介紹 Scheme 的基本特征。
- The Internet Scheme Repository
在這里可以找到許多有用的 Scheme 代碼,幾乎所有的免費(fèi) Scheme 實(shí)現(xiàn),各種算法的 Scheme 實(shí)現(xiàn),處理 Scheme 的工具比如 slatex,
- http://srfi.schemers.org/
這里是 SRFI(Scheme Requests for Implementation) 的基地。你如果覺得自己定義很多庫函數(shù),比如排序的,操作字符串的, regexp 很麻煩。但是又害怕使用不“標(biāo)準(zhǔn)”的函數(shù)庫之后跟別人不兼容。
那么在這里你可以找到一些“準(zhǔn)標(biāo)準(zhǔn)”的函數(shù)庫。SRFI 里定義的函數(shù)是鼓勵 Scheme 解釋器實(shí)現(xiàn)的。你會看到有很多工作已經(jīng)有人幫你做了。你只需要調(diào)入 SRFI 的實(shí)現(xiàn)就可以使用很方便可移植的函數(shù)庫了。
SRFI 有點(diǎn)像 RFC。以后某一些函數(shù)一定會成為各種 Scheme 解釋器都配備的東西,就像 ftp, http 一樣,成為每臺支持 TCP/IP 的機(jī)器支持的東西。
- Grinnell College 的一門利用 Scheme 來講授的計(jì)算機(jī)科學(xué)基礎(chǔ)課
以下的書籍沒有電子版本
- Concrete Abstractions: An Introduction to Computer Science Using Scheme
另一本用 Scheme 描述計(jì)算機(jī)科學(xué)的教材。
- Essentials of Programming Languages。
- The Little Schemer
一本 LISP 的入門書籍。難度沒有 SICP 大,但是非常精辟。
Scheme 解釋器和編譯器
Scheme 的實(shí)現(xiàn)很多,幾乎所有解釋器和編譯器都是自由軟件,除了 Chez。
你可以隨便選擇 MzScheme, guile, bigloo, chez, chicken, gambit, kawa, SISC, GNU/MIT scheme, petite, plt, pscheme, scheme48, SCM, scsh, stk, STklos, ELK, Gauche, sxm, umbscheme, ...
每一種解釋器都有強(qiáng)項(xiàng),可以根據(jù)自己的需要選擇。其中,Guile 和ELK 適合做嵌入式解釋器;bigloo, GambitC 和 Chicken 可以把 Scheme 編譯成機(jī)器代碼,速度快;DrScheme/MzScheme 界面最友好, Kawa 和 SISC 支持 Scheme 到 Java 的轉(zhuǎn)換,字節(jié)碼編譯;Scheme 48 非常簡潔可靠;Scsh 在 Scheme 48 基礎(chǔ)上做了很多根操作系統(tǒng)接合的界面,可以作為通用的的腳本語言;Stk 和 STklos 自帶面向?qū)ο笙到y(tǒng)和 gtk 圖形接口;Gauche 具有方便的 regexp, 網(wǎng)絡(luò),圖形接口,UTF-8 支持,可以作為很方便的腳本語言,進(jìn)行系統(tǒng)管理等操作;Chez 是Cadance Research systems 出品的商業(yè) Scheme 解釋器;Petite 是Chez 的免費(fèi)版本,比 Chez 少了一個(gè)編譯器。
更多的實(shí)現(xiàn)可以在 這里找到。關(guān)于部分解釋器,有一個(gè)比較過時(shí)的比較在 這里 。
我個(gè)人推薦使用 Aubrey Jaffer 的 SCM。它遵守 R5RS,非常方便,調(diào)試能力很強(qiáng),有 SLIB 支持,可以編譯成 C。
神奇的 Scheme
展現(xiàn) Scheme 最吸引我的地方。
Scheme 的應(yīng)用
部分我所知道的 Scheme 的應(yīng)用。看看 Scheme 被用在什么地方了。
MIT Project on Mathematics and Computation
AL 動畫語言
Kali 分布式計(jì)算語言
Envision: scheme with pictures
BRL - the Beautiful Report Language
Scheme 的一些工程應(yīng)用
一個(gè) Scheme 寫的量子計(jì)算機(jī)模擬器
總結(jié)
以上是生活随笔為你收集整理的Scheme Language的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux添加fcitx输入法,Ubun
- 下一篇: 读 Lua Documentation