天天看點

學習 Lisp 語言的相關書籍

Lisp語言難以推廣的原因有很多,而相對來說,比較高額的學習成本便是這衆多原因的其中之一。對于大部分沒有任何 Lisp 程式設計背景的人來說,在學習 Lisp 語言時,往往要克服大量思維習慣上的障礙。即使是衆多『新』語言層出不窮的今天 Lisp 語言的一些特性依然會被誤解甚至遭受莫名的刁難。這門古老的語言當真已經毫無用處了嗎?我希望人們在下斷言之前首先應當對 Lisp 有一個全面而準确的了解;否則,請『劃清界限』,『安心』享受你所在的程式設計世界的一個極端(相對于C,Lisp 可被視為另一個極端)。

下面的書籍是根據我的個人學習經驗與體會所列出的,不算完整,并帶有一些個人色彩。另外,可能有些尴尬的是,即使你讀完了所有下面這些書,依然不能宣稱自己已經會寫完整的 Lisp 代碼。當然,其中的道理很簡單:有誰能確定在讀完電視機的使用者手冊後就能自己造出一個電視機呢?

Common Lisp

《Common Lisp the Language Second Edition》 by Guy L. Steele Jr.

學習 Lisp 語言的相關書籍

該書全面而詳細地定義了 Common Lisp 語言,并且相對于第一版,第二版增加了『面向對象系統』(CLOS)、『狀況系統』以及『Loop宏』的内容,這同時也使它的厚度增加了一倍之多。

該書已提供LaTeX源碼以及一個轉譯自LaTeX代碼的HTML線上版本。

《ANSI Common Lisp》 by Paul Graham

學習 Lisp 語言的相關書籍

在 Common Lisp 的 ANSI 标準出台之後,Paul Graham 撰寫的一本 Common Lisp 的基礎教程。書中内容注重基礎概念的講解,并給出了一些簡單的執行個體。

值得一提的是,本書已由JuanitoFatas等人翻譯并釋出在了readthedocs上了。非常感謝他們的貢獻。

《On Lisp: Advanced Techniques for Common Lisp》 by Paul Graham

學習 Lisp 語言的相關書籍

正如本書副标題所訓示的那樣,這是一本有關 Common Lisp 進階程式設計技術的書。該書十分精彩,甚至對于真正想寫 Common Lisp 代碼的人來說是不可不讀的。特别是針對那些想知道 Common Lisp 到底為何與衆不同的人來說,《On Lisp》 中所講授的(尤其是)包括宏(Macro)在内的技術一定會讓他們耳目一新。

該書已可在 Paul Graham 的首頁上下載下傳;而它的中文版也已由田春冰河等人翻譯出來了。

《Practical Common Lisp》 by Peter Seibel

學習 Lisp 語言的相關書籍

這本書已經算是近年來的新書了。中譯版依然由田春冰河翻譯,這也是筆者讀的第一本 Common Lisp 的相關書籍。這本書名副其實,展示了 Common Lisp 在衆多實用性(而非傳統認識上的人工智能領域)場合下的威力。下面是我對該書的書評。

受《黑客與畫家》、《如何成為一名黑客》、《人工智能:一種現代方法》的影響,知道了 Lisp 語言,随即到亞馬遜上入手了這本書——當時能找到的關于 Lisp 的中文書真的并不是很多。

非常感謝譯者,在看了很多 Lisp 的資料以後,你才會認知到這本書翻譯的非常『紮實』。不過,其實一開始我也覺得晦澀難懂,但這其實是書本身的結構所造成的錯覺——例如我一上來就被第三章給吓到了。當然,本人的起點比較低。

隻要你靜下心來,不急不躁地學習這門古老而純粹的語言,你會發現這本書越讀越有意思,并且非常好的展現出了 Common Lisp 的應用價值(而不僅僅是教學所用)。我的建議是,一邊到網上去看看 Lisp 的文獻,一邊有計劃的看本書,讀到第十三章左右的時候,就會覺得『一切都變得很有意思』,而最後,甚至會有種『頓悟』的感覺。

值得一提的是,這本書是有HTML線上版本的。作者 Peter Seibel 的另一本著作《Coders at Work》(中譯本為《程式設計人生:15位軟體先驅訪談錄》)同樣也十分精彩。

《Paradigms of Artificial Intelligence Programming: Case Study in Common Lisp》 by Peter Norvig

學習 Lisp 語言的相關書籍

這本書我還沒有讀完,是以不發表過多評論。但有一點我很肯定的就是,該書裡面的『人工智能』是屬于 Old School 的那種,于是本書的主旨也許用副标題來描述則會顯得更為貼切。下面我摘抄一段來自朋友的對該書的書評。

PAIP turned out to be a starting point for me. Back in 2008 I had an e-mail conversation with the late Dan Weinreb. Dan wrote me a long, insightful and friendly mail about my book reviews. As I responded I wrote: “while I love PAIP, it also made me realize how little I know. So, I decided I’ll need to build a new foundation for my learning. My solution is SICP by Abelson & Sussman. I have high expectations on it.” It turned out those high expectations were widely exceeded; SICP remains my favorite programming book. PAIP comes in at a close second place and it’s a book I recommend to anyone. Just make sure you have a understanding of Lisp’s basics and you’re in for a pleasant and rewarding learning experience.

《Let Over Lambda》 by Doug Hoyte

學習 Lisp 語言的相關書籍

這是一本自費出版的圖書。涵蓋了衆多 Common Lisp 的進階程式設計技術(尤其是宏),其精彩程度絲毫不亞于 PG 的《On Lisp》。事實上,作者聲稱這本書是 《On 《On Lisp》》。

該書部分章節已有一個HTML的線上版本。

《Object-Oriented Programming in Common LISP: A Programmer’s Guide to CLOS》 by Sonja E. Keene

學習 Lisp 語言的相關書籍

Common Lisp 的對象系統(CLOS)是經過精心設計的。CLOS 采用了 廣義函數模型 而 非消息傳遞機制,光是從這一點來看筆者就覺得十分『酷炫』。總的來說,CLOS具有更高的抽象性與更好的靈活性,這一點是很值得學習的。

其他一些基礎書籍

  • 《Common Lisp: A Gentle Introduction to Symbolic Computation》by David S. Touretzky
  • 《COMMON LISP: An Interactive Approach》by STUART C. SHAPIRO

Scheme

《The Little Schemer》 by Daniel P. Friedman

學習 Lisp 語言的相關書籍

非常非常有趣的一本書。包括下面的兩本也都出自 Friedman 的手筆。真是位有趣的教授。

《The Reasoned Schemer》 by Daniel P. Friedman

學習 Lisp 語言的相關書籍
The goal of The Reasoned Schemer is to help the functional programmer think logically and the logic programmer think functionally.

《The Seasoned Schemer》 by Daniel P. Friedman

學習 Lisp 語言的相關書籍

其實整個 Schemer 系列的三本書都不是在教你文法,甚至根本不是在教你 Scheme。而如果你想學習遞歸(Recursion)思想,并深入了解高階函數(High-Order Functions)、詞法閉包(Lexical Closures)、延續性(Continuation)等等概念,那麼這三本書真是不錯的選擇。

《Structure and Interpretation of Computer Programs》 by Harold Abelson, Gerald Sussman & Julie Sussman

學習 Lisp 語言的相關書籍

大名鼎鼎的 『SICP』。這本書是我最為推崇的書之一。作為曆史上 MIT 的「6.001」 課程,其必然是有它獨特的價值的。這本書讓我重新思考了程式設計中的衆多概念與思想,可謂大開眼界。

五星推薦。并且這本書也有一個HTML的線上版本,以及從該線上版轉譯的PDF版本。

《Lisp in Small Pieces》 by Christian Queinnec

學習 Lisp 語言的相關書籍
如果你是那種對事情的工作原理究根問底的人,那麼 Christian Queinnec 的 Lisp in Small Pieces(Cambridge University Press,1996年)提供了程式設計語言理論和使用 Lisp 實作技術的完美融合。盡管該書主要集中在 Scheme 而非 Common Lisp 上,但兩者應用的是相同的原則。 —— 《實用 Common Lisp 程式設計》,第32章

Clojure

Clojure 是近年來的一門充滿生命力的新興 Lisp 方言,它更強調函數式特性,并以對 JVM 的支援而聞名。然而,我本人依然在繼續努力學習 Common Lisp ,暫時還沒有精力去研究這門方言;而另一方面,事實上,一個叫 ABCL 的 Common Lisp 實作也可以将 Common Lisp 的代碼編譯成 JVM 的位元組碼并接而傳遞運作。

在此,隻推薦一本《Clojure Programming》。我曾在圖書館看書休息時多次翻閱,個人感覺還算不錯的一本書。

學習 Lisp 語言的相關書籍

Conclusion

總的來說,Lisp 的學習之路相對來說是很耗時的,甚至可以說是比較艱辛。在剛剛列出的書籍中,不少書都有線上的HTML版本甚至PDF版本(國内好像很少有這樣的『作風』);學習材料都已經有了,那就看你想不想學了。想不想學是個問題,怎樣學則又是個問題。

祝各位學習愉快 : )

繼續閱讀