本書的目的是快速及全面的教你 Common Lisp 的有關(guān)知識(shí)。它實(shí)際上包含兩本書。前半部分用大量的例子來解釋 Common Lisp 里面重要的概念。后半部分是一個(gè)最新 Common Lisp 辭典,涵蓋了所有 ANSI Common Lisp 的操作符。
ANSI Common Lisp 這本書適合學(xué)生或者是專業(yè)的程序員去讀。本書假設(shè)讀者閱讀前沒有 Lisp 的相關(guān)知識(shí)。有別的程序語言的編程經(jīng)驗(yàn)也許對(duì)讀本書有幫助,但也不是必須的。本書從解釋 Lisp 中最基本的概念開始,并對(duì)于 Lisp 最容易迷惑初學(xué)者的地方進(jìn)行特別的強(qiáng)調(diào)。
本書也可以作為教授 Lisp 編程的課本,也可以作為人工智能課程和其他編程語言課程中,有關(guān) Lisp 部分的參考書。想要學(xué)習(xí) Lisp 的專業(yè)程序員肯定會(huì)很喜歡本書所采用的直截了當(dāng)、注重實(shí)踐的方法。那些已經(jīng)在使用 Lisp 編程的人士將會(huì)在本書中發(fā)現(xiàn)許多有用的實(shí)例,此外,本書也是一本方便的 ANSI Common Lisp 參考書。
學(xué)習(xí) Lisp 最好的辦法就是拿它來編程。況且在學(xué)習(xí)的同時(shí)用你學(xué)到的技術(shù)進(jìn)行編程,也是非常有趣的一件事。編寫本書的目的就是讓讀者盡快的入門,在對(duì) Lisp 進(jìn)行簡短的介紹之后, 第 2 章開始用 21 頁的內(nèi)容,介紹了著手編寫 Lisp 程序時(shí)可能會(huì)用到的所有知識(shí)。 3-9 章講解了 Lisp 里面一些重要的知識(shí)點(diǎn)。這些章節(jié)特別強(qiáng)調(diào)了一些重要的概念,比如指針在 Lisp 中扮演的角色,如何使用遞歸來解決問題,以及第一級(jí)函數(shù)的重要性等等。
針對(duì)那些想要更深入了解 Lisp 的讀者: 10-14 章包含了宏、CLOS、列表操作、程序優(yōu)化,以及一些更高級(jí)的課題,比如包和讀取宏。
15-17 章通過 3 個(gè) Common Lisp 的實(shí)際應(yīng)用,總結(jié)了之前章節(jié)所講解的知識(shí):一個(gè)是進(jìn)行邏輯推理的程序,另一個(gè)是 HTML 生成器,最后一個(gè)是針對(duì)面向?qū)ο缶幊痰那度胧秸Z言。
本書的最后一部分包含了 4 個(gè)附錄,這些附錄應(yīng)該對(duì)所有的讀者都有用: 附錄 A-D 包括了一個(gè)如何調(diào)試程序的指南, 58 個(gè) Common Lisp 操作符的源程序,一個(gè)關(guān)于 ANSI Common Lisp 和以前的 Lisp 語言區(qū)別的總結(jié),以及一個(gè)包括所有 ANSI Common Lisp 的參考手冊(cè)。
本書還包括一節(jié)備注。這些備注包括一些說明,一些參考條目,一些額外的代碼,以及一些對(duì)偶然出現(xiàn)的不正確表述的糾正。備注在文中用一個(gè)小圓圈來表示,像這樣:○
譯注: 由于小圈圈 ○ 實(shí)在太不明顯了,譯文中使用 λ 符號(hào)來表示備注。
雖然本書介紹的是 ANSI Common Lisp ,但是本書中的代碼可以在任何版本的 Common Lisp 中運(yùn)行。那些依賴 Lisp 語言新特性的例子的旁邊,會(huì)有注釋告訴你如何把它們運(yùn)行于舊版本的 Lisp 中。
本書中所有的代碼都可以在互聯(lián)網(wǎng)上下載到。你可以在網(wǎng)絡(luò)上找到這些代碼,它們還附帶著一個(gè)免費(fèi)軟件的鏈接,一些過去的論文,以及 Lisp 的 FAQ 。還有很多有關(guān) Lisp 的資源可以在此找到:?http://www.eecs.harvard.edu/onlisp/?源代碼可以在此 FTP 服務(wù)器上下載:?ftp://ftp.eecs.harvard.edu:/pub/onlisp/?讀者的問題和意見可以發(fā)送到?pg@eecs.harvard.edu?。
譯注:下載的鏈接都?jí)牡袅耍緯拇a可以到此下載:https://raw.github.com/acl-translation/acl-chinese/master/code/acl2.lisp
在整本 On Lisp 書中,我一直試著指出一些 Lisp 獨(dú)一無二的特性,這些特性使得 Lisp 更像 “Lisp” 。并展示一些 Lisp 能讓你完成的新事情。比如說宏: Lisp 程序員能夠并且經(jīng)常編寫一些能夠?qū)懗绦虻某绦?。?duì)于程序生成程序這種特性,因?yàn)?Lisp 是主流語言中唯一一個(gè)提供了相關(guān)抽象使得你能夠方便地實(shí)現(xiàn)這種特性的編程語言,所以 Lisp 是主流語言中唯一一個(gè)廣泛運(yùn)用這個(gè)特性的語言。我非常樂意邀請(qǐng)那些想要更進(jìn)一步了解宏和其他高級(jí) Lisp 技術(shù)的讀者,讀一下本書的姐妹篇:?On Lisp?。
On Lisp 已經(jīng)由知名 Lisp 黑客 ── 田春 ── 翻譯完成,可以在網(wǎng)絡(luò)上找到。 ── 田春(知名 Lisp 黑客、Practical Common Lisp 譯者)
在所有幫助我完成這本的朋友當(dāng)中,我想特別的感謝一下 Robert Morris 。他的重要影響反應(yīng)在整本書中。他的良好影響使這本書更加優(yōu)秀。本書中好一些實(shí)例程序都源自他手。這些程序包括 138 頁的 Henley 和 249 頁的模式匹配器。
我很高興能有一個(gè)高水平的技術(shù)審稿小組:Skona Brittain, John Foderaro, Nick Levine, Peter Norvig 和 Dave Touretzky。本書中幾乎所有部分都得益于它們的意見。 John Foderaro 甚至重寫了本書 5.7 節(jié)中一些代碼。
另外一些人通篇閱讀了本書的手稿,它們是:Ken Anderson, Tom Cheatham, Richard Fateman, Steve Hain, Barry Margolin, Waldo Pacheco, Wheeler Ruml 和 Stuart Russell。特別要提一下,Ken Anderson 和 Wheeler Ruml 給予了很多有用的意見。
我非常感謝 Cheatham 教授,更廣泛的說,哈佛,提供我編寫這本書的一些必要條件。另外也要感謝 Aiken 實(shí)驗(yàn)室的人員:Tony Hartman, Dave Mazieres, Janusz Juda, Harry Bochner 和 Joanne Klys。
我非常高興能再一次有機(jī)會(huì)和 Alan Apt 合作。還有這些在 Prentice Hall 工作的人士: Alan, Mona, Pompili Shirley McGuire 和 Shirley Michaels, 能與你們共事我很高興。
本書用 Leslie Lamport 寫的 LaTeX 進(jìn)行排版。LaTeX 是在 Donald Knuth 編寫的 TeX 的基礎(chǔ)上,又加了 L.A.Carr, Van Jacobson 和 Guy Steele 所編寫的宏完成。書中的圖表是由 John Vlissides 和 Scott Stanton 編寫的 Idraw 完成的。整本書的預(yù)覽是由 Tim Theisen 寫的 Ghostview 完成的。 Ghostview 是根據(jù) L. Peter Deutsch 的 Ghostscript 創(chuàng)建的。
我還需要感謝其他的許多人,包括:Henry Baker, Kim Barrett, Ingrid Bassett, Trevor Blackwell, Paul Becker, Gary Bisbee, Frank Deutschmann, Frances Dickey, Rich 和 Scott Draves, Bill Dubuque, Dan Friedman, Jenny Graham, Alice Hartley, David Hendler, Mike Hewett, Glenn Holloway, Brad Karp, Sonya Keene, Ross Knights, Mutsumi Komuro, Steffi Kutzia, David Kuznick, Madi Lord, Julie Mallozzi, Paul McNamee, Dave Moon, Howard Mullings, Mark Nitzberg, Nancy Parmet 和其家人, Robert Penny, Mike Plusch, Cheryl Sacks, Hazem Sayed, Shannon Spires, Lou Steinberg, Paul Stoddard, John Stone, Guy Steele, Steve Strassmann, Jim Veitch, Dave Watkins, Idelle and Julian Weber, the Weickers, Dave Yost 和 Alan Yuille。
另外,著重感謝我的父母和 Jackie。
高德納給他的經(jīng)典叢書起名為《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》。在他的圖靈獎(jiǎng)獲獎(jiǎng)感言中,他解釋說這本書的書名源自于內(nèi)心深處的潛意識(shí) ── 潛意識(shí)告訴他,編程其實(shí)就是追求編寫最優(yōu)美的程序。
就像建筑設(shè)計(jì)一樣,編程既是一門工程技藝也是一門藝術(shù)。一個(gè)程序要遵循數(shù)學(xué)原理也要符合物理定律。但是建筑師的目的不僅僅是建一個(gè)不會(huì)倒塌的建筑。更重要的是,他們要建一個(gè)優(yōu)美的建筑。
像高德納一樣,很多程序員認(rèn)為編程的真正目的,不僅僅是編寫出正確的程序,更重要的是寫出優(yōu)美的代碼。幾乎所有的 Lisp 黑客也是這么想的。 Lisp 黑客精神可以用兩句話來概括:編程應(yīng)該是有趣的。程序應(yīng)該是優(yōu)美的。這就是我在這本書中想要傳達(dá)的精神。
更多建議: