實(shí)用Common Lisp編程

出版時(shí)間:2011-10  出版社:人民郵電  作者:Peter Seibel  譯者:田春  
Tag標(biāo)簽:無  

前言

  譯者序  很榮幸,我被授權(quán)翻譯Practical Common Lisp一書。本書是自1994年Common Lisp語言標(biāo)準(zhǔn)化以來,國內(nèi)出版的第一本Common Lisp的中文教材?! isp語言家族最早誕生于1959年,它是人類歷史上第二個(gè)高級(jí)程序設(shè)計(jì)語言(第一個(gè)是Fortran)。那一年,人工智能(AI)專家John McCarthy發(fā)表了具有重大歷史意義的第一篇LISP論文“Recursive Functions of Symbolic Expressions and their Computation by Machine, Part I”,其中介紹了一種運(yùn)行在古老的IBM 704計(jì)算機(jī)上的列表處理語言LISP(LISt Processing,列表處理),借助它可以輕松描述當(dāng)時(shí)人工智能領(lǐng)域用到的各種算法。從此,Lisp語言在包括AI領(lǐng)域在內(nèi)的所有主流計(jì)算機(jī)分支上,都獲得了長足的發(fā)展。Lisp平臺(tái)不但在IBM PC出現(xiàn)之前的幾乎所有計(jì)算機(jī)硬件體系上均有移植,甚至在20世紀(jì)80年代還出現(xiàn)過專門用來運(yùn)行Lisp程序的硬件——Lisp機(jī)。1994年,ANSI標(biāo)準(zhǔn)化的Common Lisp語言將之前歷史上的所有現(xiàn)存Lisp廠商的各種語言和平臺(tái)特性做了一次偉大的總結(jié),從此語言核心不再變化,不但標(biāo)準(zhǔn)化以前的歷史遺留代碼只通過少量修改就可以兼容現(xiàn)代Lisp平臺(tái),而且標(biāo)準(zhǔn)化以后寫出的所有新代碼也都幾乎不經(jīng)任何調(diào)整就可能運(yùn)行在任何一種Common Lisp平臺(tái)上,無論是帶有原生或是字節(jié)碼編譯器的,還是間接轉(zhuǎn)譯成C語言的,或是運(yùn)行在JVM上的。目前至少有13種不同的Common Lisp語言平臺(tái)可以運(yùn)行在現(xiàn)代計(jì)算機(jī)上,其中10種還在廣泛使用中,遠(yuǎn)超過它們所在的操作系統(tǒng)上C和其他語言編譯器的數(shù)量??梢哉f,Lisp語言家族長達(dá)50年的發(fā)展史就是整個(gè)計(jì)算機(jī)發(fā)展史的縮影?! ∥覐?003年大學(xué)三年級(jí)時(shí)開始學(xué)習(xí)Common Lisp語言,至今已有八個(gè)年頭。當(dāng)時(shí)學(xué)習(xí)它的動(dòng)機(jī)基本上是出于對(duì)人工智能(傳統(tǒng)的邏輯和推理、知識(shí)表示等方向)的個(gè)人興趣。不過隨后很快就發(fā)現(xiàn),Common Lisp是一門通用的編程語言,如果不考慮其歷史淵源而只從語言本身的特性來觀察的話,可以說它跟人工智能毫無關(guān)系。在Practical Common Lisp一書中,作者Peter Seibel也談到這個(gè)問題。當(dāng)今有太多的人對(duì)Lisp語言存在類似的誤解,包括相當(dāng)多學(xué)過早期Lisp語言的人還停留在列表(List)是Lisp語言的唯一復(fù)合數(shù)據(jù)類型的認(rèn)識(shí)上。如果讀者從頭到尾學(xué)完了這本書,就會(huì)發(fā)現(xiàn)Common Lisp是一門特性豐富的大型編程語言,不但提供了現(xiàn)代編程語言普遍支持的各種數(shù)據(jù)類型(包括各種數(shù)值類型、字符串、數(shù)組、結(jié)構(gòu)體和哈希表在內(nèi)),還支持幾乎所有的編程范式(面向過程的、函數(shù)式的以及面向?qū)ο蟮模绕鋷в幸惶滋匦载S富且思想獨(dú)到的面向?qū)ο缶幊探涌贑LOS(Common Lisp Object System)和OO擴(kuò)展接口MOP(Meta-Object Protocol)。如果要用一句話來描述Common Lisp中的OO與C++/Java/SmallTalk等語言的OO有何不同,那就是Common Lisp對(duì)象系統(tǒng)完全不是基于消息傳遞的,而是基于廣義函數(shù)的。有興趣的讀者應(yīng)當(dāng)仔細(xì)閱讀本書的第16章和第17章,其中介紹了CLOS的一些入門內(nèi)容?! 〔贿^Lisp語言最吸引人的地方還在于其與眾不同的程序運(yùn)行方式。從C語言一路學(xué)過來的人往往把一門語言的語法及其標(biāo)準(zhǔn)函數(shù)庫視為語言的全部,因?yàn)橐坏┏绦驅(qū)懞茫幾g器就會(huì)將整個(gè)代碼編譯成一個(gè)可執(zhí)行程序或者被其他可執(zhí)行程序使用的庫。接下來語言本身是什么就不重要了,重要的是程序員寫出了什么功能,甚至連編譯器本身是什么都不重要,因?yàn)樗皇且粋€(gè)黑箱,除了簡單的優(yōu)化開關(guān)之外幾乎無法調(diào)整其行為。各種Lisp語言則采用完全不同的方式來運(yùn)行Lisp程序:Lisp平臺(tái)本身是一個(gè)交互式的環(huán)境,它在很大程度上就是用其本身寫成的。用戶的Lisp代碼以編譯或解釋的形式加載到Lisp環(huán)境中,然后跟Lisp語言或平臺(tái)本身的代碼直接融合在一起。換句話說,每一個(gè)Lisp程序都是對(duì)Lisp語言本身的某種形式的擴(kuò)展。然后通過一個(gè)啟動(dòng)函數(shù),整個(gè)程序得以運(yùn)行。聽到這里,讀者似乎看到了Python或者Ruby的影子,但Lisp環(huán)境還有更絕的地方:幾乎所有Lisp平臺(tái)都允許用戶將加載了用戶代碼的整個(gè)環(huán)境從內(nèi)存中導(dǎo)出(dump)為一個(gè)磁盤文件。通過直接加載這個(gè)文件而不是默認(rèn)的那個(gè)只含有Lisp本身的文件,可以迅速地重建導(dǎo)出前的Lisp環(huán)境,從而達(dá)到增量開發(fā)或者哪怕是快速加載已有Lisp程序的目的。最后,和其他語言很不同的一點(diǎn)是,Lisp語言規(guī)范(至少Common Lisp是這樣的)不但包括了如何定義某個(gè)程序組成部分(指的是變量、函數(shù)和類這些東西)的能力,還定義了從Lisp環(huán)境中清除任何程序組成部分以及就地修改它們的能力,并在語義和功能上確保了這些操作不會(huì)破壞運(yùn)行中的Lisp代碼。這導(dǎo)致了Lisp語言的另一個(gè)重要應(yīng)用:通過加載補(bǔ)丁,Lisp系統(tǒng)可以在運(yùn)行中被任意修改,這對(duì)24×7的服務(wù)器端程序的平滑升級(jí)尤為有利。順便說一句,Lisp也是最早引入垃圾收集(GC)機(jī)制的編程語言,Lisp環(huán)境中的任何對(duì)象,一旦失去了來自其他對(duì)象的引用,就會(huì)在某個(gè)時(shí)刻被GC系統(tǒng)從內(nèi)存中清除掉?! ∽x者可能已經(jīng)注意到了我在不停地混用Lisp和Common Lisp兩個(gè)概念。這有兩層含義:首先,存在Common Lisp之外的Lisp語言,更準(zhǔn)確地說是Lisp方言(dialect),至少包括了Emacs Lisp、AutoLISP、Scheme、Racket(前身是PLT Scheme)和Clojure,其中最后一個(gè)是高速發(fā)展中的新興Lisp方言;其次,所有Lisp家族的語言都有很多共性,除了上面描述中帶有Lisp而非Common Lisp字樣的部分以外,還有最大的也是初學(xué)者最容易看到的一點(diǎn),那就是所有Lisp方言都使用前綴表達(dá)式和用小括號(hào)表示的列表,例如 1+1 在Lisp中將寫成(+ 1 1)。很多初學(xué)者一開始都不適應(yīng)前綴表達(dá)式,但我認(rèn)為前綴表達(dá)式是有很多優(yōu)點(diǎn)的:首先,它徹底消除了運(yùn)算符結(jié)合性問題,令表達(dá)式毫無歧義可言;其次,它讓語言處理器更加簡單高效,避免了語法分析的困難。當(dāng)然,一旦習(xí)慣了也就感覺沒什么了?! W(xué)習(xí)本書對(duì)更好地使用其他Lisp方言無疑是大有幫助的。在翻閱書店里關(guān)于AutoLISP(AutoCAD計(jì)算機(jī)輔助設(shè)計(jì)軟件的擴(kuò)展語言)的各種書籍時(shí),我經(jīng)常痛心疾首地發(fā)現(xiàn)這些圖書的作者雖然精通AutoCAD所提供的Lisp編程接口,但寫出的AutoLISP代碼要么極為難看,要么缺乏效率、濫用內(nèi)存。AutoLISP在語法上跟Common Lisp非常接近,本書的大部分內(nèi)容都適用于AutoLISP。因此我強(qiáng)烈推薦所有AutoLISP程序員閱讀本書以加強(qiáng)自身的Lisp素養(yǎng)。同樣的問題對(duì)于Emacs Lisp(GNU Emacs文本編輯器的擴(kuò)展語言)來說也是一樣的。Scheme系的Lisp方言區(qū)別相對(duì)大一些,如果連基本的變量和函數(shù)定義都在形式上完全不同的話(當(dāng)然,思想上是沒什么本質(zhì)區(qū)別的),我恐怕初學(xué)者從本書中學(xué)得Scheme編程思想的機(jī)會(huì)不大,這種情況下還是推薦《計(jì)算機(jī)程序的構(gòu)造和解釋》、Lisp in Small Pieces和The Little Schemer等書籍比較好?! ”緯梢宰鳛槠渌鸆ommon Lisp語言教材的學(xué)習(xí)基礎(chǔ)。在本書的最后一章里,作者給出了很多后續(xù)的教材,在此就不一一重復(fù)了。需要特別指出的是,另一本著名的Common Lisp教材On Lisp(作者Paul Graham,也就是《黑客與畫家》一書的作者)多年前已經(jīng)被我和我的幾位朋友共同翻譯成中文版,細(xì)心的讀者可以從網(wǎng)上輕易地找到它。On Lisp主要介紹Common Lisp的宏編程,這是Common Lisp區(qū)別于其他語言甚至其他Lisp方言的最重要特性。我相信一旦讀者掌握了本書中關(guān)于宏的章節(jié)以后就可以閱讀On Lisp中的進(jìn)階內(nèi)容,從而將自身對(duì)編程語言的認(rèn)識(shí)上升到一個(gè)新的高度,不過更加符合實(shí)用原則的思路還是先把本書讀完。  Common Lisp絕不是一門過時(shí)的編程語言,整個(gè)Common Lisp社區(qū)一直都在高速的發(fā)展之中,近幾年的發(fā)展尤為迅速。在我學(xué)習(xí)Common Lisp的這些年里,我親眼目睹了幾個(gè)Common Lisp平臺(tái)從無到有(ECL、ABCL)或者發(fā)展壯大(SBCL、Clozure CL)的過程。經(jīng)典平臺(tái)(CMUCL、MCL)也得到了良好的維護(hù)并始終跟進(jìn)操作系統(tǒng)的自然發(fā)展。隨著計(jì)算機(jī)硬件的高速發(fā)展,即便相對(duì)保守的Common Lisp商業(yè)平臺(tái)也開始或即將開始支持對(duì)稱多處理器(SMP),其中LispWorks和Scieneer CL都以SMP支持作為主要賣點(diǎn)。第三方軟件包長足發(fā)展,雖然尚未達(dá)到Perl社區(qū)CPAN的水平,但常用的工具包一應(yīng)俱全,其中不乏高質(zhì)量的大型項(xiàng)目。近年來最新的成果Quicklisp包管理平臺(tái),更是將Common Lisp第三方軟件包的安裝過程提升到了前所未有的便捷程度。免費(fèi)平臺(tái)越來越好,商業(yè)平臺(tái)依然昂貴,開源工具蓬勃發(fā)展,所有這些都暗示著Common Lisp語言還保持著旺盛的生命力,唯一的問題是如何讓更多的國內(nèi)計(jì)算機(jī)領(lǐng)域愛好者了解它。這就是我翻譯本書的目的所在?! ∵^去8年里,我一直活躍在國內(nèi)和國際Common Lisp社區(qū)的前沿。我在大學(xué)本科的最后兩年學(xué)完了Common Lisp語言語法的主要部分,讀完了包括本書在內(nèi)的幾本最經(jīng)典的Lisp書籍,并已經(jīng)能夠在當(dāng)時(shí)最常見的CMUCL平臺(tái)(CMU Common Lisp)上編寫一些簡單的程序。后來在網(wǎng)易工作的5年里,我在工作之余從頭研究了一遍Lisp語言的發(fā)展史,親身體會(huì)了包括Lisp機(jī)在內(nèi)的十幾種不同的Common Lisp平臺(tái)或?qū)崿F(xiàn),并自費(fèi)購買了價(jià)值數(shù)千美元的商業(yè)開發(fā)環(huán)境LispWorks,擁用三種主流操作系統(tǒng)上的License。在網(wǎng)易從事Linux系統(tǒng)管理工作期間,我用Common Lisp從頭實(shí)現(xiàn)了一萬行源代碼規(guī)模的SNMP簡單網(wǎng)絡(luò)管理協(xié)議工具包,它可以為任何服務(wù)器端Common Lisp程序添加通過SNMP協(xié)議進(jìn)行遠(yuǎn)程監(jiān)控的能力,也可以作為基于Common Lisp的網(wǎng)絡(luò)監(jiān)控系統(tǒng)的基礎(chǔ)。我還在過去3年里參與維護(hù)了Common Lisp社區(qū)兩個(gè)最重要的可移植網(wǎng)絡(luò)庫之一:usocket,并由于SNMP庫的需要將其從原本只支持TCP擴(kuò)展到了同時(shí)支持UDP,其中對(duì)于LispWorks的UDP支持代碼是完全從頭寫的,因?yàn)楣俜讲⒉恢С帧?009年,我向國際Lisp會(huì)議的投稿被接受,并作為會(huì)議論文集的一部分出版。我是長期擔(dān)任水木社區(qū)函數(shù)型編程板塊的板主之一,專門負(fù)責(zé)Lisp方向的討論和技術(shù)分享。2011年7月,我離開網(wǎng)易以后開始全職從事商業(yè)Lisp軟件相關(guān)的開發(fā)工作??赡芪疫€不是一個(gè)很好的譯者,但作為一個(gè)經(jīng)驗(yàn)豐富的Common Lisp程序員,我相信自己翻譯這本書是合適的?! ∮?jì)算機(jī)領(lǐng)域每天都在高速發(fā)展,新語言和新技術(shù)的產(chǎn)生速度早已超過了一般人的學(xué)習(xí)速度。對(duì)于一個(gè)計(jì)算機(jī)領(lǐng)域的從業(yè)人員或愛好者來說,學(xué)習(xí)通常是為了更好地應(yīng)用,把所有時(shí)間都用來學(xué)習(xí)而無暇具體應(yīng)用也是本末倒置。在這種情況下,有選擇地學(xué)習(xí)最有用、最不易變質(zhì)的知識(shí),以及甄別各種計(jì)算機(jī)知識(shí)的重要程度和相互關(guān)系的能力就顯得非常重要了。從計(jì)算機(jī)語言的發(fā)展歷史來說,如果一門語言可以存活50年,那么它的內(nèi)在生命力很可能保證其繼續(xù)長期存活下去,一個(gè)人用這門語言寫下的代碼也將比其他語言的代碼更有可能長久地造福后人?! 】傊?,希望這本書能將讀者順利帶入Lisp領(lǐng)域。學(xué)習(xí)一門新的語言總是要花些成本的,但我想說,和其他任何語言相比,花在理解Lisp上的時(shí)間和精力將絕對(duì)是物超所值的,即便相當(dāng)多的讀者可能沒有機(jī)會(huì)在短期內(nèi)將Lisp用于他們的日常工作。之所以這樣說是有原因的:C和Lisp是編程語言的兩個(gè)極端,大多數(shù)人已經(jīng)熟悉了C的那一端,但如果他們還熟悉另一端的話,那么迅速理解幾乎所有其他的編程語言將不再是問題?! ∽g者簡介  田春,網(wǎng)名“冰河”,Glority Software資深軟件工程師,前網(wǎng)易杭州研究院高級(jí)開發(fā)工程師和系統(tǒng)管理員,資深Common Lisp程序員;2001~2005年就讀于浙江大學(xué),2003年起開始學(xué)習(xí)Commom Lisp,精通Lisp史和各種實(shí)現(xiàn),2007年起成為 LispWorks 付費(fèi)用戶;Common Lisp社區(qū)的網(wǎng)絡(luò)專家,開源項(xiàng)目cl-net-snmp(SNMP協(xié)議庫)的作者,usocket跨平臺(tái)網(wǎng)絡(luò)庫的主要維護(hù)者,common-lisp.net站點(diǎn)管理員,水木社區(qū)(newsmth.net)函數(shù)型編程語言(FuncProgram)版主,美國Versata/Gensym公司技術(shù)顧問;曾在ILC 2009(國際Lisp會(huì)議)上發(fā)表學(xué)術(shù)論文,在《程序員》雜志上發(fā)表Common Lisp專題文章;曾在2008年翻譯了Paul Graham的On Lisp一書,并在網(wǎng)上撰寫過大量相關(guān)的技術(shù)文章。

內(nèi)容概要

《實(shí)用Common Lisp編程》是一本不同尋常的Common
Lisp入門書?!秾?shí)用Common
Lisp編程》首先從作者的學(xué)習(xí)經(jīng)過及語言歷史出發(fā),隨后用21個(gè)章節(jié)講述了各種基礎(chǔ)知識(shí),主要包括:REPL及Common
Lisp的各種實(shí)現(xiàn)、S-表達(dá)式、函數(shù)與變量、標(biāo)準(zhǔn)宏與自定義宏、數(shù)字與字符以及字符串、集合與向量、列表處理、文件與文件I/O處理、類、FORMAT格式、符號(hào)與包,等等。而接下來的9個(gè)章節(jié)則翔實(shí)地介紹了幾個(gè)有代表性的實(shí)例,其中包含如何構(gòu)建垃圾過濾器、解析二進(jìn)制文件、構(gòu)建ID3解析器,以及如何編寫一個(gè)完整的MP3
Web應(yīng)用程序等內(nèi)容。最后還對(duì)一些未介紹內(nèi)容加以延伸。
  《實(shí)用Common Lisp編程》內(nèi)容適合Common Lisp初學(xué)者及對(duì)之感興趣的相關(guān)人士。

作者簡介

Peter Seibel 從作家演變成程序員,又從程序員演變成作家,其職業(yè)生涯可謂一波三折。他在獲得英語專業(yè)學(xué)士學(xué)位后做過一段時(shí)間的記者工作,后來被Web所吸引。在20世 紀(jì)90年代早期,他用Perl建立了Mother Jones雜志和Organic Online網(wǎng)站。他作為WebLogic的早期雇員參與了Java革命,隨后又在加州大學(xué)伯克利分校教授Java編程。他也是第二代Lisp程序員之 一,并曾經(jīng)是Symbolics的早期股東。2003年他辭去技術(shù)工作,潛心研究Lisp,并憑借本書獲得Jolt生產(chǎn)效率大獎(jiǎng)。2009年出版了名噪一 時(shí)的訪談錄《編程人生》(Coders at Work)。

書籍目錄

第1章 緒言:為什么是Lisp 
 1.1 為什么是Lisp 
 1.2 Lisp的誕生 
 1.3 本書面向的讀者 
第2章 周而復(fù)始:REPL簡介 
 2.1 選擇一個(gè)Lisp實(shí)現(xiàn) 
 2.2 安裝和運(yùn)行Lisp in a Box 
 2.3 放開思想:交互式編程 
 2.4 體驗(yàn)REPL 
 2.5 Lisp風(fēng)格的“Hello, World” 
 2.6 保存工作成果 
第3章 實(shí)踐:簡單的數(shù)據(jù)庫 
 3.1 CD和記錄 
 3.2 錄入CD 
 3.3 查看數(shù)據(jù)庫的內(nèi)容 
 3.4 改進(jìn)用戶交互 
 3.5 保存和加載數(shù)據(jù)庫 
 3.6 查詢數(shù)據(jù)庫 
 3.7 更新已有的記錄——WHERE再戰(zhàn)江湖 
 3.8 消除重復(fù),獲益良多 
 3.9 總結(jié) 
第4章 語法和語義 
 4.1 括號(hào)里都可以有什么 
 4.2 打開黑箱 
 4.3 S-表達(dá)式 
 4.4 作為Lisp形式的S-表達(dá)式 
 4.5 函數(shù)調(diào)用 
 4.6 特殊操作符 
 4.7 宏 
 4.8 真、假和等價(jià) 
 4.9 格式化Lisp代碼 
第5章 函數(shù) 
 5.1 定義新函數(shù) 
 5.2 函數(shù)形參列表 
 5.3 可選形參 
 5.4 剩余形參 
 5.5 關(guān)鍵字形參 
 5.6 混合不同的形參類型 
 5.7 函數(shù)返回值 
 5.8 作為數(shù)據(jù)的函數(shù)——高階函數(shù) 
 5.9 匿名函數(shù) 
第6章 變量 
 6.1 變量的基礎(chǔ)知識(shí) 
 6.2 詞法變量和閉包 
 6.3 動(dòng)態(tài)變量 
 6.4 常量 
 6.5 賦值 
 6.6 廣義賦值 
 6.7 其他修改位置的方式 
第7章 宏:標(biāo)準(zhǔn)控制構(gòu)造 
 7.1 WHEN和UNLESS 
 7.2 COND 
 7.3 AND、OR和NOT 
 7.4 循環(huán) 
 7.5 DOLIST和DOTIMES 
 7.6 DO 
 7.7 強(qiáng)大的LOOP 
第8章 如何自定義宏  
 8.1 Mac的故事:只是一個(gè)故事 
 8.2 宏展開期和運(yùn)行期 
 8.3 DEFMACRO 
 8.4 示例宏:do-primes 
 8.5 宏形參 
 8.6 生成展開式 
 8.7 堵住漏洞 
 8.8 用于編寫宏的宏 
 8.9 超越簡單宏 
第9章 實(shí)踐:建立單元測試框架 
 9.1 兩個(gè)最初的嘗試 
 9.2 重構(gòu) 
 9.3 修復(fù)返回值 
 9.4 更好的結(jié)果輸出 
 9.5 抽象誕生 
 9.6 測試層次體系 
 9.7 總結(jié) 
第10章 數(shù)字、字符和字符串 
 10.1 數(shù)字 
 10.2 字面數(shù)值 
 10.3 初等數(shù)學(xué) 
 10.4 數(shù)值比較 
 10.5 高等數(shù)學(xué) 
 10.6 字符 
 10.7 字符比較 
 10.8 字符串 
 10.9 字符串比較 
第11章 集合 
 11.1 向量 
 11.2 向量的子類型 
 11.3 作為序列的向量 
 11.4 序列迭代函數(shù) 
 11.5 高階函數(shù)變體 
 11.6 整個(gè)序列上的操作 
 11.7 排序與合并 
 11.8 子序列操作 
 11.9 序列謂詞 
 11.10 序列映射函數(shù) 
 11.11 哈希表 
 11.12 哈希表迭代 
第12章 LISP名字的由來:列表處理 
 12.1 “沒有列表” 
 12.2 函數(shù)式編程和列表 
 12.3 “破壞性”操作 
 12.4 組合回收性函數(shù)和共享結(jié)構(gòu) 
 12.5 列表處理函數(shù) 
 12.6 映射 
 12.7 其他結(jié)構(gòu) 
第13章 超越列表:點(diǎn)對(duì)單元的其他用法 
 13.1 樹 
 13.2 集合 
 13.3 查詢表:alist和plist 
 13.4 DESTRUCTURING-BIND 
第14章 文件和文件I/O 
 14.1 讀取文件數(shù)據(jù) 
 14.2 讀取二進(jìn)制數(shù)據(jù) 
 14.3 批量讀取 
 14.4 文件輸出 
 14.5 關(guān)閉文件 
 14.6 文件名 
 14.7 路徑名如何表示文件名 
 14.8 構(gòu)造新路徑名 
 14.9 目錄名的兩種表示方法 
 14.10 與文件系統(tǒng)交互 
 14.11 其他I/O類型 
第15章 實(shí)踐:可移植路徑名庫 
 15.1 API 
 15.2 *FEATURES*和讀取期條件化 
 15.3 列目錄 
 15.4 測試文件的存在 
 15.5 遍歷目錄樹 
第16章 重新審視面向?qū)ο螅簭V義函數(shù) 
 16.1 廣義函數(shù)和類 
 16.2 廣義函數(shù)和方法 
 16.3 DEFGENERIC 
 16.4 DEFMETHOD 
 16.5 方法組合 
 16.6 標(biāo)準(zhǔn)方法組合 
 16.7 其他方法組合 
 16.8 多重方法 
 16.9 未完待續(xù) 
第17章 重新審視面向?qū)ο螅侯悺?br /> 17.1 DEFCLASS 
 17.2 槽描述符 
 17.3 對(duì)象初始化 
 17.4 訪問函數(shù) 
 17.5 WITH-SLOTS和WITHACCESSORS 
 17.6 分配在類上的槽 
 17.7 槽和繼承 
 17.8 多重繼承 
 17.9 好的面向?qū)ο笤O(shè)計(jì) 
第18章 一些FORMAT秘訣 
 18.1 FORMAT函數(shù) 
 18.2 FORMAT指令 
 18.3 基本格式化 
 18.4 字符和整數(shù)指令 
 18.5 浮點(diǎn)指令 
 18.6 英語指令 
 18.7 條件格式化 
 18.8 迭代 
 18.9 跳,跳,跳 
 18.10 還有更多 
第19章 超越異常處理:狀況和再啟動(dòng) 
 19.1 Lisp的處理方式 
 19.2 狀況 
 19.3 狀況處理器 
 19.4 再啟動(dòng) 
 19.5 提供多個(gè)再啟動(dòng) 
 19.6 狀況的其他用法 
第20章 特殊操作符 
 20.1 控制求值 
 20.2 維護(hù)詞法環(huán)境 
 20.3 局部控制流 
 20.4 從棧上回退 
 20.5 多值 
 20.6 EVAL-WHEN 
 20.7 其他特殊操作符 
第21章 編寫大型程序:包和符號(hào) 
 21.1 讀取器是如何使用包的 
 21.2 包和符號(hào)相關(guān)的術(shù)語 
 21.3 三個(gè)標(biāo)準(zhǔn)包 
 21.4 定義你自己的包 
 21.5 打包可重用的庫 
 21.6 導(dǎo)入單獨(dú)的名字 
 21.7 打包技巧 
 21.8 包的各種疑難雜癥 
第22章 高階LOOP 
 22.1 LOOP的組成部分 
 22.2 迭代控制 
 22.3 計(jì)數(shù)型循環(huán) 
 22.4 循環(huán)集合和包 
 22.5 等價(jià)?然后迭代 
 22.6 局部變量 
 22.7 解構(gòu)變量 
 22.8 值匯聚 
 22.9 無條件執(zhí)行 
 22.10 條件執(zhí)行 
 22.11 設(shè)置和拆除 
 22.12 終止測試 
 22.13 小結(jié) 
第23章 實(shí)踐:垃圾郵件過濾器 
 23.1 垃圾郵件過濾器的核心 
 23.2 訓(xùn)練過濾器 
 23.3 按單詞來統(tǒng)計(jì) 
 23.4 合并概率 
 23.5 反向卡方分布函數(shù) 
 23.6 訓(xùn)練過濾器 
 23.7 測試過濾器 
 23.8 一組工具函數(shù) 
 23.9 分析結(jié)果 
 23.10 接下來的工作 
第24章 實(shí)踐:解析二進(jìn)制文件 
 24.1 二進(jìn)制文件 
 24.2 二進(jìn)制格式基礎(chǔ) 
 24.3 二進(jìn)制文件中的字符串 
 24.4 復(fù)合結(jié)構(gòu) 
 24.5 設(shè)計(jì)宏 
 24.6 把夢想變成現(xiàn)實(shí) 
 24.7 讀取二進(jìn)制對(duì)象 
 24.8 寫二進(jìn)制對(duì)象 
 24.9 添加繼承和標(biāo)記的結(jié)構(gòu) 
 24.10 跟蹤繼承的槽 
 24.11 帶有標(biāo)記的結(jié)構(gòu) 
 24.12 基本二進(jìn)制類型 
 24.13 當(dāng)前對(duì)象?!?br />第25章 實(shí)踐:ID3解析器 
 25.1 ID3v2標(biāo)簽的結(jié)構(gòu) 
 25.2 定義包 
 25.3 整數(shù)類型 
 25.4 字符串類型 
 25.5 ID3標(biāo)簽頭 
 25.6 ID3幀 
 25.7 檢測標(biāo)簽補(bǔ)白 
 25.8 支持ID3的多個(gè)版本 
 25.9 版本化的幀基礎(chǔ)類 
 25.10 版本化的具體幀類 
 25.11 你實(shí)際需要哪些幀 
 25.12 文本信息幀 
 25.13 評(píng)論幀 
 25.14 從ID3標(biāo)簽中解出信息 
第26章 實(shí)踐:用AllegroServe進(jìn)行Web編程 
 26.1 30秒介紹服務(wù)器端Web編程 
 26.2 AllegroServe 
 26.3 用AllegroServe生成動(dòng)態(tài)內(nèi)容 
 26.4 生成HTML 
 26.5 HTML宏 
 26.6 查詢參數(shù) 
 26.7 cookie 
 26.8 小型應(yīng)用框架 
 26.9 上述框架的實(shí)現(xiàn) 
第27章 實(shí)踐:MP3數(shù)據(jù)庫 
 27.1 數(shù)據(jù)庫 
 27.2 定義模式 
 27.3 插入值 
 27.4 查詢數(shù)據(jù)庫 
 27.5 匹配函數(shù) 
 27.6 獲取結(jié)果 
 27.7 其他數(shù)據(jù)庫操作 
第28章 實(shí)踐:Shoutcast服務(wù)器 
 28.1 Shoutcast協(xié)議 
 28.2 歌曲源 
 28.3 實(shí)現(xiàn)Shoutcast 
第29章 實(shí)踐:MP3瀏覽器 
 29.1 播放列表 
 29.2 作為歌曲源的播放列表 
 29.3 操作播放列表 
 29.4 查詢參數(shù)類型 
 29.5 樣板HTML 
 29.6 瀏覽頁 
 29.7 播放列表 
 29.8 查找播放列表 
 29.9 運(yùn)行應(yīng)用程序 
第30章 實(shí)踐:HTML生成庫,解釋器部分 
 30.1 設(shè)計(jì)一個(gè)領(lǐng)域相關(guān)語言 
 30.2 FOO語言 
 30.3 字符轉(zhuǎn)義 
 30.4 縮進(jìn)打印器 
 30.5 HTML處理器接口 
 30.6 美化打印器后臺(tái) 
 30.7 基本求值規(guī)則 
 30.8 下一步是什么 
第31章 實(shí)踐:HTML生成庫,編譯器部分 
 31.1 編譯器 
 31.2 FOO特殊操作符 
 31.3 FOO宏 
 31.4 公共API 
 31.5 結(jié)束語 
第32章 結(jié)論:下一步是什么 
 32.1 查找Lisp庫 
 32.2 與其他語言接口 
 32.3 讓它工作,讓它正確,讓它更快 
 32.4 交付應(yīng)用程序 
 32.5 何去何從

編輯推薦

由塞貝爾編著的《實(shí)用Common Lisp編程》展示了Lisp的威力,不僅表現(xiàn)在傳統(tǒng)領(lǐng)域上,例如僅使用短短26行代碼就開發(fā)出一個(gè)完整的單元測試框架,而且還表現(xiàn)在一些全新的領(lǐng)域上,諸如解析二進(jìn)制MP3文件、構(gòu)建瀏覽歌曲集的Web應(yīng)用、在Web上傳播音頻流等。讀過本書,你將體會(huì)到Lisp具有Pytl-ion等腳本語言的簡潔性、C++的高效性,以及在設(shè)計(jì)語言擴(kuò)展時(shí)無與倫比的靈活性。    《實(shí)用Common Lisp編程》內(nèi)容適合Common Lisp初學(xué)者及對(duì)之感興趣的相關(guān)人士。

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    實(shí)用Common Lisp編程 PDF格式下載


用戶評(píng)論 (總計(jì)152條)

 
 

  •   還好。正在學(xué)習(xí)函數(shù)式編程,就買了一本。從《黑客和畫家》之后,lisp就慢慢的熱起來了。
    想?yún)⒓右恍╅_源項(xiàng)目,所以要加油了。歡迎交流。

    怎么說呢,編程還是思想重要,最好是現(xiàn)精通一門(精通的概念就是想寫東西,語言不是你的障礙),然后去擴(kuò)展。

    函數(shù)式編程和普通的面向?qū)ο缶幊毯瓦^程式編程很不一樣。。
    現(xiàn)在就很受面向?qū)ο蟮慕d。
  •   市面上少有的介紹Lisp編程的書籍,內(nèi)容不錯(cuò),值得一看
  •   收到書,感覺挺不錯(cuò)的,不過不是一本入門級(jí)的書哦,可以試著找別的書入門一下,我之前是在圖書館找到的,一本挺舊的書,比較找的不過是LISP的,或者找ON LISP的中文看一下,總的話,覺得還可以,至少還可以知道怎么搭載環(huán)境。
  •   lisp入門學(xué)習(xí),應(yīng)該不錯(cuò)!
  •   一般都是從《黑客與畫家》那里開始對(duì)Lisp感興趣的,***mon Lisp 不錯(cuò),你值得擁有!
  •   應(yīng)該是國內(nèi)首個(gè)lisp書籍(不算早期教材),推薦對(duì)lisp感興趣的人閱讀

    基本上循序漸進(jìn),從一個(gè)個(gè)小項(xiàng)目中帶領(lǐng)讀者深入lisp世界
  •   lisp入門經(jīng)典,不容錯(cuò)過!
  •   還沒有看,紙張很不錯(cuò),摸起來很舒服。
    從目錄看內(nèi)容很多,希望可以從中獲取lisp的思想真諦。
  •   lisp是一門神奇的語言呀 , 雖然還沒有仔細(xì)看
  •   lisp無疑是上一代程序員留給我們的一大瑰寶,作者和譯者也都是高手,心情很激動(dòng)。
  •   剛看了幾頁,還不錯(cuò),好像有人說原著的腳注沒有了,可是我看有注釋的呀,先看把,反正有原版的 實(shí)在不行兩本一起看,不過lisp的中文書實(shí)在少得可憐呀。有一本看看不錯(cuò)了。
  •   學(xué)lisp不錯(cuò)的書~~
  •   Lisp,大神級(jí)別的工具!努力學(xué)習(xí)中.......
  •   學(xué)習(xí)lisp必備
  •   讀過多次英文版本,中文版本還比較順。程序員高階自我修煉,必學(xué)lisp
  •   很好的展現(xiàn)***mon lisp的哲學(xué)與實(shí)用性的時(shí)間方案
  •   沒用過emacs的建議不要通過lisp on box做實(shí)驗(yàn),太痛苦了。
    直接在linux下裝個(gè)clisp,通過vi寫代碼,clisp執(zhí)行,簡單方便。
  •   第一本中文lisp,不錯(cuò)。
  •   翻譯的比較嚴(yán)謹(jǐn),很少加工,邏輯非常嚴(yán)密。 實(shí)踐性強(qiáng)的章節(jié)看的還是比較賞心悅目的,特別是23章開始,逐漸拾起前面一骨碌塞過來的語言基礎(chǔ)知識(shí),慢慢融會(huì)貫通。這時(shí)候你就知道,原來這些特性是這樣用的。 實(shí)踐的內(nèi)容趣味性也很強(qiáng),為了搞懂23章的**郵件過濾器,還專門學(xué)習(xí)了貝葉斯定理相關(guān)的內(nèi)容?!『竺鎸?shí)踐的項(xiàng)目會(huì)用到前面的結(jié)果,作者對(duì)內(nèi)容構(gòu)思的不錯(cuò)。 總而言之,對(duì)于真正對(duì)語言感興趣的人來說,是一本很好的入門書。
  •   書質(zhì)量很好,同類書國內(nèi)極少見。譯者很年輕,很有才華。計(jì)算機(jī)類的書都比較貴,不過用了10元禮券,還行,可以接受。這種計(jì)算機(jī)語言使用起來很直接,學(xué)C之前可以學(xué)。
  •   好多天過去了 一直忙著考試 也沒寫評(píng)論 實(shí)在很抱歉 書很不錯(cuò) 紙質(zhì)非常漂亮 不過我是學(xué)C++的 段時(shí)間沒可能接受不了書中的精華 所以對(duì)書中內(nèi)容不便做評(píng)論 物流很不錯(cuò) 當(dāng)當(dāng)?shù)奈锪骱蜁馁|(zhì)量一直是我最滿意的 贊!??!
  •   紙質(zhì)很不錯(cuò),印刷質(zhì)量也很好。內(nèi)容一開始看會(huì)覺得很困難,慢慢熟悉以后就會(huì)好很多了
  •   選擇當(dāng)當(dāng)?shù)脑?,不只是因?yàn)閮r(jià)格便宜一些,同時(shí),其送貨的速度,真的特別快了。
  •   終于發(fā)貨了,三天后看書!盼啊
  •   還沒看完,學(xué)習(xí)
  •   好像是不多的一本關(guān)于***monLisp的中文書籍,沒得選擇,先買本看了。
  •   好啊,感謝啊
  •   和原文配套飲用效果更佳
  •   現(xiàn)在但了7章了,收獲不小,是本難得的CLisp方面的好書
  •   就這一本,沒得想
  •   看完了前兩章,感覺還可以。PS:英文的原著我沒看過。
  •   非常好,看了之后收益匪淺。
  •   noce book
  •   還買開始看
    當(dāng)當(dāng)?shù)乃拓浰俣炔桓夜ЬS
    但是這本書應(yīng)該不錯(cuò)
  •   我正在等待中
  •   沒辦法 修改訂單。。。

    管理員能不能取消訂單啊。。。
  •   還要等多久啊?
  •   看了《黑客與畫家》后,對(duì)于作者說的小眾語言的優(yōu)勢,在于想自己做出有競爭力的產(chǎn)品的人來說,LISP是一門不錯(cuò)的開發(fā)語言,網(wǎng)上看到黑客們(不是作惡的駭客)必學(xué)的5個(gè)語言中赫然有LISP的語言后,果斷就來買了這本書,雖然我還沒想用這門語言帶入我的日常工作(也沒有這個(gè)條件),但是學(xué)習(xí)下函數(shù)式(雖然LISP群里的大大說我被誤導(dǎo)了,可網(wǎng)上搜索依然都是說函數(shù)式的)的編程語言的思想也是不錯(cuò)的,從各方面看,C類的語言也正在像函數(shù)式語言的一些特性靠攏,這本書也是能找到的少數(shù)的中文書了,希望能通過這本書,讓我能了解到LISP的魅力。
  •   以前之學(xué)過 c語言風(fēng)格的語言,第一次接觸lisp,很多思維還沒轉(zhuǎn)變過來,比如lisp的宏,還在適應(yīng)。
  •   Lisp書籍很少,中文版就更少了。上圖書館借了一本,看了幾章,感覺還好,翻譯質(zhì)量也還過得去,至于網(wǎng)上說翻譯非常糟糕是有點(diǎn)夸張了。這本書的特色就是實(shí)踐性很強(qiáng),但缺點(diǎn)也是顯而易見的,要回頭查閱相關(guān)的知識(shí)有點(diǎn)困難,要是有一些附錄內(nèi)容以供查閱的話就更好了。這樣的話,我們只能另外到網(wǎng)上去下載CLtL或者CLHS之類語言規(guī)范手冊了。因?yàn)檫@種書出版量會(huì)比較少,所以雖然可以借閱到,但仍然快速入手一本,以免斷貨。
  •   ***mon Lisp的入門經(jīng)典,理論與實(shí)踐相結(jié)合。適合感興趣的,或真正能用到的。
  •   想通過學(xué)習(xí),認(rèn)識(shí)AI和在工作中能用到lisp,從淺入深用連貫的實(shí)例來讓讀者學(xué)習(xí)一個(gè)新的語言。
  •   入門的話推薦Paul Graham的ANSI ***mon Lisp,
    這本書沒有索引是硬傷
  •   國內(nèi)第一本講LISP的書藉,無論如何都值得買一本珍藏。
  •   讓我學(xué)會(huì)了lisp,不過看完了還有點(diǎn)意猶未盡,難度再高點(diǎn)就好了。
  •   很少LISP的書籍啊。。。。。。。。。。值得看
  •   在編程思想上,LISP顯得比較另類,但不是滑稽平庸的另類,而是內(nèi)涵精彩的另類。目前暫不打算用它做什么大東西,光是修煉一下思維還是挺好的。
  •   略微翻了下,冰河老大的翻譯質(zhì)量……好吧確實(shí)有點(diǎn)生硬,不過我覺得這個(gè)可以理解,畢竟lisp的中文翻譯,貌似沒多少人在作,所以術(shù)語上的統(tǒng)一、翻譯上的不流暢,都是可以理解的。英文原版我還會(huì)繼續(xù)看,拿中文版對(duì)照一下吧,技術(shù)書籍還是看英文原版比較好~~
  •   吸引人的一本書,開始就有具體例子,直接上手寫程序
  •   包裝不錯(cuò), 內(nèi)容很充實(shí), 值得珍藏
  •   看到翻譯者自己介紹,感覺堅(jiān)持就是勝利。
  •   正在看,類容不太好理解
  •   翻譯巨爛,看原文都比看中文的明白, 東西還是好東西
  •   翻譯的確實(shí)不怎么樣,太程序化思維了
  •   預(yù)定了,快出來吧
  •   作者對(duì)lisp的理解很深刻,但是對(duì)翻譯的理解就遠(yuǎn)遠(yuǎn)不如了
  •   比較厚,同時(shí)也在看其他書,這本僅翻了翻,感覺是比較枯燥。。
  •   某些天外飛仙般的函數(shù)和宏招之即來有的根本就在后面才定義(如let*)有的根本就沒定義.
    即便前面提到過的,如果忘記細(xì)節(jié)去找由于沒有索引也老半天才能翻到.

    那么書中大半內(nèi)容介紹語言的部分,又不齊全又不深入,有啥用?砍掉然后翻譯個(gè)ansi ***mon lisp捆綁銷售算了....
  •   翻譯的太生硬,有點(diǎn)google翻譯器翻譯的感覺。。。
  •   從書本身的內(nèi)容來講是很不錯(cuò)的,正如其名,書的內(nèi)容很有實(shí)踐性和操作性,在涵蓋了Common Lisp語言多數(shù)特點(diǎn)的同時(shí)也有不少很好的例子,相比而言比Paul Graham的ANSI Common Lisp一書更容易理解??上?,這本書的翻譯水平讓人有點(diǎn)不敢恭維。從譯者的介紹來看,技術(shù)水平應(yīng)該是很高的,可惜翻譯還需要的文字功底譯者似乎就比較欠缺了,翻譯的行文感覺不符合漢語的表達(dá)習(xí)慣,更像是從英文直譯過來的。我在閱讀的時(shí)候遇到看不太明白的句子時(shí),只好對(duì)照下載的英文原版,才能正確的理解。
  •   寫的很跳躍,而且macro沒有講清楚。
  •   受《黑客與畫家》、《如何成為一名黑客》、《人工智能:一種現(xiàn)代方法》的影響,知道了Lisp語言,隨即到亞馬遜上入手了這本書——當(dāng)時(shí)能找到的關(guān)于Lisp的中文書真的并不是很多。非常感謝譯者,在看了很多Lisp的資料以后,你才會(huì)認(rèn)知到這本書翻譯的非常“扎實(shí)”。不過,其實(shí)一開始我也覺得晦澀難懂,但這其實(shí)是書本身的結(jié)構(gòu)所造成的錯(cuò)覺——例如我一上來就被第三章給嚇到了。當(dāng)然,本人的起點(diǎn)比較低。只要你靜下心來,不急不躁地學(xué)習(xí)這門古老而純粹的語言,你會(huì)發(fā)現(xiàn)這本書越讀越有意思,并且非常好的體現(xiàn)出了Common Lisp的應(yīng)用價(jià)值(而不僅僅是教學(xué)所用)。我的建議是,一邊到網(wǎng)上去看看Lisp的文獻(xiàn),一邊有計(jì)劃的看本書,讀到第十三章左右的時(shí)候,就會(huì)覺得“一切都變得很有意思”,而最后,甚至?xí)蟹N“頓悟”的感覺。
  •   看了黑客與畫家來的,認(rèn)識(shí)田春的,好奇心驅(qū)使!
  •   書的內(nèi)容不錯(cuò),紙張也不錯(cuò), 賣家態(tài)度比較誠懇,會(huì)主動(dòng)來關(guān)心和解決客戶的問題另外價(jià)格也算是比較便宜的...
  •   好久沒有看到這樣的好書了翻譯就是專業(yè)的 Lisp 程序員翻譯的,很久沒有看到由專業(yè)的程序員翻譯的書了。贊!?。。。。。。。。。?!至于內(nèi)容,更牛掰,不信,買來看看,保證你不會(huì)后悔。
  •   第一次在AMAZON上買書無論書 還是 快遞 都令人很開心雖然以前了解一些關(guān)于LISP的資料也學(xué)過ELISP(P.S.就是那本紅皮的書)這是我第一本到手的實(shí)體書就讓這本書作為我踏入AI以及函數(shù)式編程領(lǐng)域的開始
  •   因?yàn)槲ㄒ凰?星,翻譯還行
  •   1.此書翻譯的還可以。有些人說翻譯的不好,我懷疑他們是不是要求一個(gè)程序員的文字功力和傅雷一樣?2.確實(shí)講得有點(diǎn)難,但Lisp本身就和我們原來學(xué)的面向過程、面向?qū)ο蠛懿灰粯?,不可能指望像Python一樣三五天學(xué)會(huì)。但作者其實(shí)講得非常專業(yè)、非常細(xì)致。下載一個(gè)lispbox,跟著作者講的一步步實(shí)踐,基本是能學(xué)會(huì)的。
  •   看的不是很懂。不過,看過lisp后,對(duì)python卻感到更加容易了。
  •   本來內(nèi)容不錯(cuò), 就是翻譯的水平啊~~~
  •   買回來感覺挺好,我挺喜歡的
  •   挺適合初學(xué)者看的,不錯(cuò)!
  •   有些內(nèi)容根本就沒講清楚。不適合入門
  •   Common Lisp入門書,很不錯(cuò)
  •   內(nèi)容不錯(cuò)值得學(xué)習(xí)??!
  •   慢慢研究,時(shí)候沒學(xué)過語言的人學(xué)習(xí)
  •   傘哥翻譯的,經(jīng)典的書還是紙質(zhì)版的仔細(xì)看吧
  •   這種書有提升功力的用途
  •   學(xué)習(xí)lisp很好的一本書
  •   好的譯者 好的作者
  •   實(shí)用、好看、推薦
  •   學(xué)得好玩,還沒看
  •        翻譯的書讀起來,很費(fèi)勁。得自己去猜測理解,里面是什么意思?!∮悬c(diǎn)郁悶。
      
      自己英語不好,但相比而言,看來還是,英語學(xué)好,讀原版哈。。。
      可惜的是原版不便宜啊。。。天哪,什么時(shí)候原版書能便宜。。。?
  •      書是本好書,出版前就在當(dāng)當(dāng)?shù)谝粋€(gè)預(yù)定了。結(jié)果是比較失望的,學(xué)習(xí)到第18章,實(shí)在是受不了了,才找來英文版重新來過?,F(xiàn)在已經(jīng)把整本書學(xué)習(xí)了一邊,回頭再看看翻譯的這版,才知道翻譯的有多么糟糕,不知道那些覺得翻譯的還不錯(cuò)的人有沒有把書認(rèn)真看完。就拿我回頭看這本書的實(shí)踐章節(jié)做個(gè)例子----第23章270頁:“BYTE接受兩個(gè)參數(shù),即 需要解出(或設(shè)置)的位數(shù)量以及最右邊那一位相對(duì)整數(shù)中最不重要位來說以零開始的位置。 ”。 這TM的什么意思?“相對(duì)整數(shù)中最不重要位來說”:請問,什么叫整數(shù)中最不重要位?這叫個(gè)什么概念?整數(shù)的位還分重要不重要?整數(shù)中有什么位是不重要的么?當(dāng)當(dāng)居然還有評(píng)論說翻譯得嚴(yán)謹(jǐn),翻譯得不錯(cuò)。請問這些人花幾十塊大洋買回來得書有仔細(xì)看過么?找到原書對(duì)應(yīng)的這句:
      
      “BYTE takes two arguments, the number of bits to extract (or set) and the position of the rightmost bit where the least significant bit is at position zero. ”。
      
       其中: "least significant bit" 是最低有效位的意思...。這不是在害人么?這本書中這樣的例子不勝枚舉。哦!我現(xiàn)在明白了,這個(gè)譯者就是想讓那些英文不太好的讀者在讀了這本翻譯的書之后,打消學(xué)習(xí)common lisp的念頭,然后他自己就可以一個(gè)人牛X哄哄了,原來是這樣,呵呵。所以我建議大家還是把英語都學(xué)好,不要再被迷惑了,都去買原版書籍吧。
  •     書是本好書,出版前就在當(dāng)當(dāng)?shù)谝粋€(gè)預(yù)定了。結(jié)果是比較失望的,學(xué)習(xí)到第18章,實(shí)在是受不了了,才找來英文版重新來過?,F(xiàn)在已經(jīng)把整本書學(xué)習(xí)了一邊,回頭再看看翻譯的這版,才知道翻譯的有多么糟糕,不知道那些覺得翻譯的還不錯(cuò)的人有沒有把書認(rèn)真看完。就拿我回頭看這本書的實(shí)踐章節(jié)做個(gè)例子----第23章270頁:“BYTE接受兩個(gè)參數(shù),即 需要解出(或設(shè)置)的位數(shù)量以及最右邊那一位相對(duì)整數(shù)中最不重要位來說以零開始的位置。 ”。 這TM的什么意思?“相對(duì)整數(shù)中最不重要位來說”:請問,什么叫整數(shù)中最不重要位?這叫個(gè)什么概念?整數(shù)的位還分重要不重要?整數(shù)中有什么位是不重要的么?當(dāng)當(dāng)居然還有評(píng)論說翻譯得嚴(yán)謹(jǐn),翻譯得不錯(cuò)。請問這些人花幾十塊大洋買回來得書有仔細(xì)看過么?找到原書對(duì)應(yīng)的這句:“BYTE takes two arguments, the number of bits to extract (or set) and the position of the rightmost bit where the least significant bit is at position zero. BYTE takes two arguments, the number of bits to extract (or set) and the position of the rightmost bit where the least significant bit is at position zero.”。其中: "least significant bit" 是最低有效位的意思...。這不是在害人么?這本書中這樣的例子不勝枚舉。哦!我現(xiàn)在明白了,這個(gè)譯者就是想讓那些英文不太好的讀者在讀了這本翻譯的書之后,打消學(xué)習(xí)common lisp的念頭,然后他自己就可以一個(gè)人牛X哄哄了,原來是這樣,呵呵。所以我建議大家還是把英語都學(xué)好,不要再被迷惑了,都去買原版書籍吧。
  •     前幾章還順暢,挺好的,不過大概是從第四章開始,看起來就比較累了,特別是對(duì)于沒有接觸過函數(shù)式編程人來說就更加難理解一些。 相比之下,我覺得ansi common lisp寫得更加清晰一些。或許這一本不是很適合從零開始學(xué)習(xí)的人。
  •     就是本垃圾書
      作者還尼碼自我感覺良好
      敘述能力嚴(yán)重不足
      。。。。。。。。。。。。。。。。。
      。。。。。。。。。。。。。。。。。
      。。。。。。。。。。。。。。。。。
      。。。。。。。。。。。。。。。。。
      。。。。。。。。。。。。。。。。。
      。。。。。。。。。。。。。。。。。
      
  •     第一到三章寫的不錯(cuò),讀來很有成就感,很想繼續(xù)讀下去,結(jié)果從第四章開始,就變味了,每讀幾分鐘就想睡覺,不知道為什么,已經(jīng)讀了好多天了,從第四章到二十二章都是這樣的感覺。后來仔細(xì)想想,為何差別這么大,可能是因?yàn)楹竺孢@么多章都是在講解一些細(xì)節(jié),語法之類的東西,而且講的太哆嗦,明明可以用列表的方式一次性把一類語法講清楚,他非要用一些抽象的語言來描述,結(jié)果描述的時(shí)候,用戶一邊讀一邊就得想象,否則你不知道他在寫什么,這樣就非常累,完全不如直接用表格和例子加注釋這種方式說的清楚,他這種寫法的結(jié)果就是這十幾章的內(nèi)容,勉強(qiáng)讀完,還是不知道他介紹的到底是什么,語法不清楚,也沒有表格,也沒有容易搞混的關(guān)鍵字的比較。完全一頭霧水。
      也許作者本人是很清楚,可惜他沒有用一種清晰的方式介紹出來,讀了還不如不讀,因?yàn)橐蛔x這書,你很快會(huì)睡著了,然后就失去了學(xué)習(xí)這門語言的信心,再也不想學(xué)這種混亂的一米的語言了。
      這就是這本書的結(jié)果,但是值的一提的是,除了中間的這些章節(jié),1到3還有后面的一些章節(jié)還是值的讀的,但是問題就是中間的這些章節(jié)你沒搞清楚,讀后面的就很累。這也是悲劇,只能再找其他語法書搞清楚了,再來看這書中的那些示例章節(jié)。
  •     翻譯的比較嚴(yán)謹(jǐn),很少加工,邏輯非常嚴(yán)密。
      
      先講缺點(diǎn)。
      以practical為書名,對(duì)于practical性質(zhì)不是很強(qiáng)的章節(jié)講的就不是太好了。特別是11~13章,幾乎是填鴨式的塞了一堆名詞,看的頭疼。沒有耐心很難一次性記住這些東西。關(guān)鍵是一大堆東西說完就走了,不再理睬,直到很后面的章節(jié)才會(huì)重新提到。
      所以很容易讓人放棄繼續(xù)看下去。
      
      不過實(shí)踐性強(qiáng)的章節(jié)看的還是比較賞心悅目的,特別是23章開始,逐漸拾起前面一骨碌塞過來的語言基礎(chǔ)知識(shí),慢慢融會(huì)貫通。這時(shí)候你就知道,原來這些特性是這樣用的。
      
      實(shí)踐的內(nèi)容趣味性也很強(qiáng),為了搞懂23章的垃圾郵件過濾器,還專門學(xué)習(xí)了貝葉斯定理相關(guān)的內(nèi)容。
      后面實(shí)踐的項(xiàng)目會(huì)用到前面的結(jié)果,作者對(duì)內(nèi)容構(gòu)思的不錯(cuò)。
      
      總而言之,對(duì)于真正對(duì)語言感興趣的人來說,是一本很好的入門書。
      如果只是想窺其一豹,讀前三章加第7章就ok了。
  •     非常有特點(diǎn)的一本書,很適合有其他編程語言經(jīng)驗(yàn)的讀者。
      傳說中的LISP大牛,田春,的翻譯實(shí)在有點(diǎn)讓人失望。
      說兩個(gè)我印象深刻的:29頁的注釋3的面試翻譯成了采訪;喜歡把“evalute X”翻譯成“求值A(chǔ)”。
      雖然,譯者作為一個(gè)資深LISP程序員,全書基本沒有出現(xiàn)什么技術(shù)上的問題。面試翻成采訪這種明顯的錯(cuò)誤也很少。但是,類似“求值”的這種問題非常多,讓人讀起來非常糾結(jié)?!癳valuate X”一般人都會(huì)譯成“對(duì)X求值”,結(jié)果他非要寫“求值X”。本來“值”就是賓語,后面還要加上“X”,而“值”和“X”根本不是同位語,這種句子讀起來根本不通。
      在京東上,有人評(píng)價(jià)田春“英語和國語都不過關(guān)”。這可能有點(diǎn)過,但是文字上中文版的水準(zhǔn)確實(shí)對(duì)不比起原著。
  •     如果你對(duì)Common Lisp有偏見以為是AI或?qū)W院派專用,或許你可以翻翻此書。本書除了簡要的介紹了基本的Common Lisp語言規(guī)范以外,還通過實(shí)用的示例展示了Common Lisp語言的特點(diǎn)、優(yōu)勢以及作為一種通用編程語言在解決實(shí)際問題時(shí)的常用方法。
      
      個(gè)人覺得如果實(shí)在覺得《ANSI Common Lisp》或者《Cltl》枯燥冗長,那么本書也是入門CL的最佳讀物了。
  •     翻譯的水平確實(shí)有待提高,不過英文原版本身寫得就不怎么樣,可以說是講lisp的書里水平最差的一本,讀起來不爽不能完全怪翻譯。目的也許是好的,想講得通俗一點(diǎn),不過一句話能說清楚的東西非要用兩三句話來說,并不一定能讓讀者更容易理解。
      
      當(dāng)然這本書的內(nèi)容也不是完全沒有亮點(diǎn)。loop其實(shí)可以算得上是另外一種語言了,在lisp里面一連七八個(gè)八九個(gè)十好幾個(gè)單詞一個(gè)括號(hào)也沒有,確實(shí)是一件很瘋狂的事情,不過loop真的很好用。這本書專門開了一章講,介紹得還是很詳細(xì)的。在這一點(diǎn)上真的是很符合書名里的“實(shí)用”二字,我估計(jì)喜歡scheme的人不大會(huì)喜歡loop。
      
      
      這個(gè)譯者好像很喜歡lisp,on lisp也是他翻的,水平其實(shí)挺不錯(cuò)。
  •     她媽的《實(shí)用common lisp》,是一本翻譯的極度垃圾的垃圾,好好的大作,就這樣被糟蹋了,看到就想吐??!我好疼心好疼心。
      她媽的《實(shí)用common lisp》,是一本翻譯的極度垃圾的垃圾,好好的大作,就這樣被糟蹋了,看到就想吐?。∥液锰坌暮锰坌?。
      她媽的《實(shí)用common lisp》,是一本翻譯的極度垃圾的垃圾,好好的大作,就這樣被糟蹋了,看到就想吐!!我好疼心好疼心。
      她媽的《實(shí)用common lisp》,是一本翻譯的極度垃圾的垃圾,好好的大作,就這樣被糟蹋了,看到就想吐!!我好疼心好疼心。
  •     已經(jīng)很久沒有看過編程語言的教科書了.
      上一本還是c++ primer. 雖然作者講的清楚明了, 但是還是稍顯枯燥.
      這本書讓我感覺是在講lisp的故事一樣. 作者不愧曾經(jīng)是從事英語
      寫作的專業(yè)人員. 讀起來很舒服. 講解的也夠清楚.
      
      比如第一次提到宏的時(shí)候有說:
      I can't emphasize enough that the Common Lisp macro shares essentially nothing but the name with the text-based macros found in C and C++. Where the C pre-processor operates by textual substitution and understands almost nothing of the structure of C and C++, a Lisp macro is essentially a code generator that gets run for you automatically by the compiler.
      象是一位高手在和我聊天, 同時(shí)又用compiler的概念來幫助理解(因?yàn)楹瓴⒉粌H被compiler運(yùn)行, 也被interpretor運(yùn)行).
      
      而且本書采用了一個(gè)很好的交互環(huán)境. emacs+slime讓我們可以輕松的做實(shí)驗(yàn). 邊學(xué)邊實(shí)踐.
      
      不僅是講解語言細(xì)節(jié), 第一個(gè)小數(shù)據(jù)庫的例子就足以讓我瞥到lisp的威力. 短短幾十行的數(shù)據(jù)庫實(shí)現(xiàn)了select, update, insert, write, load.
  •     就在兩天前的晚上,我徹夜不眠地將《永生之酒》這部動(dòng)畫看完了。
      
      這部作品敘事的方式很獨(dú)特:一般的作品,通常敘事都是以一條時(shí)間線、單角色的角度進(jìn)行的,而《永生》則將一個(gè)故事拆散,用三四條時(shí)間線分別錯(cuò)開,每條時(shí)間線上還有多個(gè)角色分別敘述自己的故事。
      
      這樣大膽的敘事方式,很明顯產(chǎn)生的結(jié)果是,如果你不將整部作品看完的話,你根本不明白發(fā)生了什么事情——你看完前兩三集,發(fā)現(xiàn)自己連故事背景都沒搞清楚,因?yàn)樗揪蜎]交代!掙扎著地將整部作品看了一半之后,你才開始對(duì)故事有些眉目,但還是不能總攬全局;忍無可忍看到最后一集,看著原本錯(cuò)開的幾條時(shí)間線逐漸相交成一點(diǎn),而分散的各路人馬也最終匯集在一起,整個(gè)故事才圓滿收尾。
      
      這時(shí)你才明白導(dǎo)演在編劇方面的良苦用心,你發(fā)現(xiàn)之前讓你痛苦不堪的敘事手法,到最后反而讓整個(gè)故事變得更有味道。
      
      當(dāng)然,遺憾的是,并不是每個(gè)人都有機(jī)會(huì)看到這個(gè)故事的結(jié)局,也許剛開始,有一半人被特別的敘事手法嚇跑了;而故事進(jìn)行到一半的時(shí)候,也許另外一半人又因?yàn)槿淌懿涣寺裏岬膭∏槎x開了,而剩下的那些人,才最終看到了整個(gè)完整的故事。
      
      這種感覺有點(diǎn)像是在黑夜中前行一樣——你的前方、路的盡頭,有一絲微弱的光線,你知道方向就是這樣,路就這一條,但你不知道還要走多久,還要走多遠(yuǎn),你唯一能做的,就是耐著性子,一步一個(gè)腳印向前邁進(jìn)。
      
      ---
      
      某種程度上,閱讀這本《Practical Common Lisp》(后稱PCL)的過程也是如此。
      
      正如作者在第三章所言的那樣,這本《PCL》并不是以一般的語言書籍作為模板的,那些循規(guī)蹈矩的語言教程總是先教你定義變量,了解語法結(jié)構(gòu),告訴你如何定義函數(shù)、對(duì)象、包,從開始到結(jié)尾,難度逐漸加大。
      
      而這本《PCL》則更符合實(shí)用原則,提倡在實(shí)踐中學(xué)習(xí)——只介紹最少的理論,最少的API,然后,剩下的就是邊編程邊學(xué)習(xí)了:在這本書的正式開始部分,第三章,它在介紹了少量必要語法知識(shí)的前提下就用一個(gè)數(shù)據(jù)庫的例子介紹了Lisp的列表操作以及文件的讀寫,在最后還直接了當(dāng)?shù)匾肓薒isp的大殺器——宏,一點(diǎn)不廢話,然后,在第三章之后,才開始花了幾章的邊幅,介紹第三章所用到的技術(shù),在這之后,章節(jié)的編排基本就和一般的教程沒有什么兩樣了。(其實(shí),如果你讀過pragmatic programmer的書,你可能早就適應(yīng)這本書的風(fēng)格了。)
      
      當(dāng)然,作者偏向?qū)嵺`性的寫作方式和章節(jié)編排,并不是為了文學(xué)創(chuàng)作需要或者故意刁難讀者,而是,一方面,函數(shù)式編程作為一個(gè)長期被誤解為“學(xué)院派”的方向,急需一些“實(shí)用型”的書籍來為普羅大眾解毒;另一方面,如果一開始就長篇大論介紹函數(shù)式編程的細(xì)節(jié)和理論(lambda、eval。。。),然后才開始講common lisp,恐怕最后反而會(huì)嚇怕更多人。
      
      譯者在序言中說這本書可以讓新手入門common lisp,我對(duì)此并不(太)反對(duì),但由于這本書趨向?qū)嵺`性的編排方式,一些理論介紹得比較簡單,而如果缺少對(duì)一些關(guān)鍵理論的理解,就會(huì)給Lisp的學(xué)習(xí)帶來困難,所以我個(gè)人感覺從這本書入門并無不可,只是難度偏高,你得有一定的耐心,將書讀透才行。
      
      當(dāng)然,這個(gè)過程可能是不太容易的,我猜在第三章之后,一半人放棄了,然后在第七到第九章之間,在宏的折磨下,又一半人放棄了,然后剩下的人,才有機(jī)會(huì)最終一窺Lisp之美。
      
      就像看動(dòng)畫一樣,通常只有“熬”到最后的人,才有機(jī)會(huì)遇見美好的結(jié)局。
      
      ---
      
      最后,看到有一些人評(píng)論者抱怨這本書翻譯質(zhì)量不好,對(duì)此我比較難以理解:靠著一些《SICP》的經(jīng)驗(yàn),這本書我看得很快,只分兩次就讀完了,24章之后挑了兩三章來看,因?yàn)闆]接觸過宏,在宏的章節(jié)遇到了點(diǎn)麻煩,但沒有停留太久。
      
      我個(gè)人認(rèn)為這本書的整體閱讀體驗(yàn)還是很流暢的,整本書從內(nèi)容和翻譯上來說都算得上佳作——我覺得讀者們應(yīng)該慶幸,這本書是由一個(gè)真正的Lisp程序員來翻譯,而不是一個(gè)JAVA程序員或者外語系的三年級(jí)生。
      
      如果你在閱讀這本書的過程中覺得舉步維艱、晦澀難懂,比起懷疑翻譯質(zhì)量,也許更合理的做法是補(bǔ)充一下自己的基礎(chǔ)知識(shí),如果你也這么認(rèn)為的話(嗯,另外一部分人也許不愿意承認(rèn)這個(gè)),那么《SICP》的課程視頻和書本,以及paul graham的文章,比如《root of lisp》都應(yīng)該是你的好幫手。
      
      嗯,大概就那么多了,各位加油,我們在終點(diǎn)再會(huì)。
      
      ---
      傳說中的腳注:
      
      程序員修煉之道,check list 26,"select" isn't broken
      
      root of lisp(中文):
      http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html
      
      sicp視頻(youtube的有英文字幕):
      http://www.youtube.com/results?search_query=sicp&aq=f
      http://www.youku.com/playlist_show/id_3967477.html
  •      這本書叫實(shí)用編程,是從實(shí)用角度來寫的,里面的內(nèi)容也很實(shí)用。
       不過雖然作者在書里寫了一些入門基礎(chǔ)知識(shí),但從整本書的結(jié)構(gòu)上來看,很不利于學(xué)習(xí)lisp語言。
       首先,基礎(chǔ)知識(shí)諸如數(shù)據(jù)類型等說明很偏后,而且并不詳盡,主次也不分明。
       其次,很多函數(shù)和宏第一次出現(xiàn)是不加說明的,到了后面幾十頁才給予解釋。
       第三,很多術(shù)語只有專業(yè)計(jì)算機(jī)人員能看懂,對(duì)于非計(jì)算機(jī)類專業(yè)諸如理工科只學(xué)過C語言的人還是太難以入門了。這本書夾雜了很多計(jì)算機(jī)語言之外的內(nèi)容。
       所以,對(duì)于愛好編程,本身卻沒有基礎(chǔ),或者只學(xué)過C語言的同學(xué),本書是不適合的。對(duì)于那些熟悉數(shù)據(jù)結(jié)構(gòu)、軟件體系的程序員,他們?nèi)绻腴_始學(xué)lisp,這本書可能是合適的。
       需要稱贊的是書的內(nèi)容確實(shí)比較實(shí)用
  •      Lisp 作為經(jīng)典的黑客語言,日久彌新。對(duì)lisp 我想補(bǔ)充幾點(diǎn),
      1 應(yīng)該是lisp中首先提出垃圾回收機(jī)制;
      2 lisp 的java 平臺(tái)版本clojure也很火;
      3 作為函數(shù)編程語言鼻祖 影響深遠(yuǎn),尤其在現(xiàn)在硬件高度發(fā)達(dá)的情況下優(yōu)點(diǎn)非常突出。
      
       lisp 關(guān)注者相對(duì)于其他語言確實(shí)小眾了一些,銷量估計(jì)也未必高,但學(xué)了他能夠提升編程思想,出版社能夠出這樣一本書真的是替程序員著想,為了口碑,質(zhì)量應(yīng)該會(huì)很重視。
      
      關(guān)于譯者,最早見到他是水木的社區(qū),是lisp版主,成果頗多。后來知道他的博客,可以感覺這個(gè)人認(rèn)真的有點(diǎn)過頭:),人品也很不錯(cuò)。他的作品基本可以放心,不大會(huì)有什么謬誤。
      不過此書讀起來感覺行文稍有些滯澀,像是技術(shù)規(guī)范,可能是句式轉(zhuǎn)換不太熟練(用編程語言來思考多了) 或是原文如此吧
  •     我知道這樣說對(duì)辛苦翻譯的作者很不公平,但我還是要客觀地說出我的看法。
      我看到第十七章時(shí)實(shí)在是無法忍了。本身自己之前積累的LISP基礎(chǔ)也就包括了基本的語法使用,此書前些的章節(jié),不通順的語句湊合著自己的理解也就讀懂了。但是實(shí)在是乏力啊... ...靠著老本終有倒下的一天。
      看書的目的畢竟是學(xué)習(xí)而不是復(fù)習(xí)。不夸張的說,這本中文書籍我的閱讀速度絕對(duì)已經(jīng)慢于其他的英文版LISP教程了。
      也許是這本Practical Common LISP太難翻譯所致,不過無論什么理由,譯者的水平確實(shí)有待提高。
  •     本人是剛開始學(xué)lisp,看到第十章,雖然對(duì)lisp有了一些概念,但是還是覺得一頭霧水.
      
      好歹也學(xué)用編程有些年頭了,感覺不太正常. 不知道是翻譯的問題,書的問題,還是本身lisp就是這么與眾不同.
      
      
      從這本書的結(jié)構(gòu)來看,和一般的教材不大一樣,開頭三章基本上都是和lisp語法不太相關(guān)的東西.第四章才開始進(jìn)入編程語言相關(guān)的內(nèi)容.講解基本的語法什么的.然后書籍的最后部分是用實(shí)例來講解如何完成一些功能的項(xiàng)目.
      
      
      在講解和說明一些特性的時(shí)候,會(huì)使用到一些lisp的宏,但是書籍當(dāng)中沒有單獨(dú)排版出來或者用醒目的方式單獨(dú)標(biāo)出來,而是把這些宏的說明內(nèi)容和其他文字一起排在一起.如果看到一段文字,想回過頭來查找前面的宏的使用方法,簡直太難找了.
      
      
      總體感覺 ,這本書講common lisp 的基本語法的內(nèi)容講的不清楚,然后具體使用的部分偏多.不太適合沒有l(wèi)isp基礎(chǔ)的人.
      
      
  •     學(xué)習(xí)common lisp 的必讀書,正在閱讀中 就是沒有中譯本,看的比較慢,希望能夠一直堅(jiān)持下去,也是我認(rèn)真閱讀的第一本lisp書籍。書本身寫的比較有趣,不晦澀
 

250萬本中文圖書簡介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7