实用ansi common lisp pdf编程 田春翻译的这本书,急需,有人二手转让吗

Common Lisp:符号计算简单介绍(翻译后记) - 简书
下载简书移动应用
写了258744字,被80人关注,获得了176个喜欢
Common Lisp:符号计算简单介绍(翻译后记)
(WARNING:以下并非作者的原文)首先要对这个文集的9为订阅者表示感谢(此文写时统计),限于本人经验和知识水平,到后面的几章,已经是理解比较吃力了。希望继续学习之后,回过头再完善。现在可以公开的情报:
由于篇幅和我比较懒,只翻译了正文部分,还有章节之间的练习题,章节之后的复习题,以及每一章的练习都省略了。总共14章正文。
通文中文的术语系统不是很统一,在翻译过程中对于这些概念也是一点点的进行理解,使用很多其他的语言概念来理解。function(函数还是功能)等等,都是按照学过的C系列语言来说的。
这里给出的是这本书的英文版下载链接,,可以直接下载英文版,最后的两个附录A和B有两个工具SDRAW和DTRACE的lisp源代码。
练习题的答案在附录C中,还有术语解释,这本入门的lisp书真的写的很专业,专业的教科书。
接下来是本文的重点,作者列出的阅读书单
Franz Inc., Common Lisp: The Reference. Addison-Wesley, Reading, MA, 1988.Steele, Guy L. Jr., Common Lisp: The Language. Digital Press, Burlington, MA,1984.这两本书出版的时间真的比较古老了,都是成名的好书,听说第二本是经典。
历史材料:
Barstow, David R., Shrobe, Howard, E., and Sandewall, Erik (eds.), Interactive Programming Environments, McGraw-Hill, New York, 1984.Gabriel, Richard P., ‘‘Lisp,’’ in Stuart C. Shapiro (ed.), Encyclopedia of Artificial Intelligence, volume 1, pp. 508–528, John Wiley & Sons, New York, 1987.McCarthy, John, ‘‘Recursive functions of symbolic expressions and their computation by machine,’’ Communications of the ACM 3(4), 184–195 (1960).McCarthy, John, ‘‘History of Lisp,’’ in D. Wexelblat (ed.), History of Programming Languages, Academic Press, New York, 1978.McCarthy, John, Abrahams, Paul W., Edwards, Daniel J., Hart, Timothy P., and Levin, Michael I., Lisp 1.5 Programmer’s Guide, 2nd ed., MIT Press, Cambridge,MA, 1965.lisp的创造者McCarthy的论文,真的是历史资料了,论文应该值得一看。
进阶材料:
Charniak, Eugene, Riesbeck, Christopher K., McDermott, Drew, and Meehan, James R., Artificial Intelligence Programming, 2nd ed., Lawrence Erlbaum Associates,Hillsdale, NJ, 1987.Charniak, Eugene, and McDermott, Drew, Artificial Intelligence, Addison-Wesley,Reading, MA, 1985.Gabriel, Richard P., Performance and Evaluation of Lisp Systems, MIT Press,Cambridge, MA, 1985.Hofstadter, Douglas R., Godel, Escher, Bach: an Eternal Golden Braid, Basic Books,New York, 1979.Keene, Sonya E., Object-Oriented Programming in Common Lisp, Addison-Wesley,Reading, MA, 1989.Winston, Patrick H., Artificial Intelligence, 2nd ed., Addison-Wesley, Reading, MA,1984.进阶是人工智能方面呢,看来很有意思的样子。
其他lisp教科书:
Abelson, Harold, and Sussman, Gerald Jay, Structure and Interpretation of Computer Programs, MIT Press, Cambridge, MA, 1985. SICP,MIT的schme教科书。Anderson, John R., Corbett, Albert T., and Reiser, Brian J., Essential Lisp, Addison-Wesley, Reading, MA, 1987.Wilensky, Robert, Common LISPcraft, W. W. Norton, New York, 1986.Winston, Patrick H., and Horn, Berthold K. P., Lisp, 3rd ed., Addison-Wesley,Reading, MA, 1989.其他的入门教科书,略略看了一下SICP,一开始就不能直视啊,才先来看一些基础的。
其实和其他的语言相比,Lisp的书籍基本上都是以在线电子书的形式免费获取的,,只是基本上都是英文的,中文的材料有著名的伞哥(也是国内唯一的知名lisp开发者)翻译的实用common lisp编程,已经出版了。作为一个初学者,感觉lisp的学习曲线还是很陡峭的,和其他传到国内的编程语言命运差别很大,好像国内的人工智能研究也没有太多关注,中文社区也没有很多,中文资料几乎没有,高校里面也没有打算教,微博上的相关大V也没有多少,各个geek网站也没有关注,我看了一些资料和大家的论调之后,想可能lisp真的是一种已经淘汰的语言。可能不止没有钱途,更加连前途都没有,对初学者没那么友好的结果就是没有新鲜血液流入,最后悔慢慢凋零,说实话,一开始写超过十行的程序,括号就已经开始凌乱了。说起来也许是很中二的,我一直深信在发展的时候,无论是科技发展和社会发展,人工智能一定是最终的工具,或者说其中的一步,很多的科幻电影都会描述机器有了自我意识的时候会发生什么,就像机器有了生命,有了真正的自我,而不是一个先进的算法,可以自己思考,自己做出判断,甚至有感情,由道德,懂得幽默,会讲笑话的智能。当然形式不一定是机器人,人形的机器,而只是智能。有有一条路被开辟出来的时候,无论这条路是宽还是窄,人多还是人少,后来的人都会走过前人走过的地方,最后在路的尽头或者某一块,用自己的时间和精力来拓展一块。也就是站在巨人的肩膀上看世界,虽然有时候可能都看不到路的尽头。lisp,人工智能,prolog,或许这就是前任走过的路,那就在旧的路上看看尽头,走到世界的尽头,也挺有意思的。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
我觉得您是一个很厉害的人,虽然不知道您到底是干什么的,但是应该属于那种偏文艺或者比较随性的那类……这个文集非常喜欢。因为……虽然英文能够看懂,但是不够精通,看起来速度还是太慢,有这样的文集真是可以很快的帮助入门。还是要认真的对您说声谢谢!
无心插柳柳成荫,如果对你有所帮助我很高兴。水平有限,都是字面翻译,本来是让自己看英文的时候不至于贪快躲懒,可以放慢速度的手段。很久没更新了,待学习之后再来吧。谢谢
关于文中最后一段对lisp的评论我有不同看法,作者似乎是将lisp与AI挂钩了,而其实,lisp用于AI只是历史的机缘巧合,lisp历史上最大的贡献是在编程语言理论上,作为探索PL的先驱,lisp引入了higher order function、hygienic macro、static scoping、first class continuation等等的概念,大部分的现代语言都或多或少地借鉴了lisp的语言特性。lisp采用S-expression作为其语法形式,书写代码时相当于手工构造语法树,这种灵活性使lisp成为编程语言前沿理论的绝佳试验田,可以很方便地实现各种各样的interpreter。至于说lisp被淘汰,其实不完全对,lisp只是小众,偏安一隅,不过仍一直在发展。像Racket(lisp的一种方言),在scheme基础上引入了很多新特性,还加入了大量实用的库,被国外很多大学用作语言理论研究;又如clojure,jvm上的lisp,被用作web开发,这些方言都使lisp重新焕发新机
谢谢,很有帮助
被以下专题收入,发现更多相似内容:
欢迎投稿 将实用的知识共享
· 20798人关注
一门古老的语言
· 12人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:Posts - 87,
Articles - 0,
Comments - 2
11:35 by Scott Guthrie Liu, ... 阅读,
我很荣幸被授权翻译《Practical Common Lisp》一书,本书是自1994年Common Lisp语言标准化以来国内出版的第一本Common Lisp的中文教材。
Lisp语言家族最早诞生于1959年,它是人类历史上第二个高级程序设计语言(第一个是Fortran)。那一年人工智能(AI)专家John McCarthy发表了具有重大历史意义的第一篇LISP论文:《Recursive Functions of Symbolic Expressions and their Computation by Machine, Part I》,其中介绍了一种运行在古老的IBM 704计算机上的列表处理语言LISP(LISt Processing,列表处理),借助它可以轻松描述当时人工智能领域用到的各种算法。从此,Lisp语言在包括AI领域在内的所有主流计算机分支上都获得了长足的发展,Lisp平台不但在IBM PC出现之前的几乎所有计算机硬件体系上均有移植,甚至在80年代还出现过专门用来运行Lisp程序的硬件&&Lisp机。1994年ANSI标准化的Common Lisp语言将之前历史上的所有现存Lisp厂商的各种语言和平台特性做了一次伟大的总结,从此语言核心不再变化,不但标准化以前的历史遗留代码只通过少量修改就可以兼容现代Lisp平台,而且标准化以后写出的所有新代码也都几乎不经任何调整就可能运行在任何一种Common Lisp平台上,无论是带有原生或是字节码编译器的,还是间接转译成C语言的,或是运行在JVM上的。目前至少有13种不同的Common Lisp语言平台可以运行在现代计算机上,其中10种还在广泛使用中,远超过它们所在的操作系统上C和其他语言编译器的数量。可以说Lisp语言家族长达50年的发展史就是整个计算机发展史的缩影。
我从2003年大学三年级时开始学习Common Lisp语言,至今已有八个年头。当时学习它的动机基本上是出于对人工智能(传统的逻辑和推理、知识表示等方向)的个人兴趣。不过随后很快就发现,Common Lisp是一门通用的编程语言,如果不考虑其历史渊源而只从语言本身的特性来观察的话,它跟人工智能可以说是毫无关系。在《Practical Common Lisp》一书中,作者Peter Seibel也将谈到这个问题。当今有太多的人对Lisp语言存在类似的误解,包括相当多的学过早期Lisp语言的人头脑中还停留在列表(List)是Lisp语言的唯一复合数据类型的认识上。如果读者从头到尾学完了这本书,就会发现Common Lisp是一门特性丰富的大型编程语言,不但提供了现代编程语言普遍支持的各种数据类型(包括各种数值类型、字符串、数组、结构体和哈希表在内),还支持几乎所有的编程范式(面向过程的、函数式的,以及面向对象的),尤其带有一套特性丰富且思想独到的面向对象编程接口CLOS (Common Lisp Object System)和OO扩展接口MOP (Meta-Object Protocol)。如果要用一句话来描述Common Lisp中的OO与C++/Java/SmallTalk等语言的OO有何不同,那就是Common Lisp对象系统完全不是基于消息传递的,而是基于广义函数的。有兴趣的读者应当仔细阅读本书的第16和17两章,其中介绍了CLOS的一些入门内容。
不过Lisp语言最吸引人的地方还在于其与众不同的程序运行方式。从C语言一路学过来的人往往把一门语言的语法及其标准函数库视为语言的全部,因为一旦程序写好,编译器就会将整个代码编译成一个可执行程序或者被其他可执行程序使用的库。接下来语言本身是什么就不重要了,重要的是程序员写出了什么功能。甚至连编译器本身是什么都不重要,因为它只是一个黑箱,除了简单的优化开关之外几乎无法调整其行为。各种Lisp语言则采用完全不同的方式来运行Lisp程序:Lisp平台本身是一个交互式的环境,它在很大程度上就是用其本身写成的。用户的Lisp代码以编译或解释的形式加载到Lisp环境中,然后跟Lisp语言或平台本身的代码直接融合在一起。换句话说,每一个Lisp程序都是对Lisp语言本身的某种形式的扩展。然后通过一个启动函数,整个程序得以运行。听到这里,读者似乎看到了Python或者Ruby的影子,但Lisp环境还有更绝的地方:几乎所有Lisp平台都允许用户将加载了用户代码的整个环境从内存中导出(dump)为一个磁盘文件。通过直接加载这个文件而不是默认的那个只含有Lisp本身的文件,可以迅速地重建导出前的Lisp环境,从而达到增量开发或者哪怕是快速加载已有Lisp程序的目的。最后,和其他语言很不同的一点是,Lisp语言规范(至少Common Lisp是这样的)不但包括了如何定义某个程序组成部分(指的是变量、函数和类这些东西)的能力,还定义了从Lisp环境中清除任何程序组成部分以及就地修改它们的能力,并在语义和功能上确保了这些操作不会破坏运行中的Lisp代码。这导致了Lisp语言的另一个重要应用:通过加载补丁,Lisp系统可以在运行中被任意修改,这对24&7的服务端程序的平滑升级尤为有利。顺便说一句,Lisp也是最早引入垃圾收集(GC)机制的编程语言,Lisp环境中的任何对象,一旦失去了来自其他对象的引用,就会在某个时刻被GC系统从内存中清除掉。
读者可能已经注意到了我在不停地混用Lisp和Common Lisp两个概念。这有两层含义:首先,存在Common Lisp之外的Lisp语言,更准确地说是Lisp方言(dialect),这至少包括了Emacs Lisp、AutoLISP、Scheme、Racket(前身是PLT Scheme)和Clojure,其中最后一个是高速发展中的新兴Lisp方言;其次,所有Lisp家族的语言都有很多共性,除了上面描述中带有Lisp而非Common Lisp字样的部分以外,还有最大的也是初学者最容易看到的一点,那就是所有Lisp方言都使用前缀表达式和用小括号表示的列表,例如 1+1 在Lisp中将写成(+ 1 1)。很多初学者一开始都不适应前缀表达式,但我认为前缀表达式是有很多优点的:首先它彻底消除了运算符结合性问题,令表达式毫无歧义可言;其次它让语言处理器更加简单高效,避免了语法分析的困难。当然,一旦习惯了也就感觉没什么了。
学习本书对更好地使用其他Lisp方言无疑是大有帮助的。在翻阅书店里关于AutoLISP(AutoCAD计算机辅助设计软件的扩展语言)的各种书籍时,我经常痛心疾首地发现这些图书的作者虽然精通AutoCAD所提供的Lisp编程接口,但写出的AutoLISP代码要么极为难看,要么缺乏效率、滥用内存。AutoLISP在语法上跟Common Lisp非常接近,本书的大部分内容都适用于AutoLISP。因此我强烈推荐所有AutoLISP程序员阅读本书以加强自身的Lisp素养。同样的问题对于Emacs Lisp(GNU Emacs文本编辑器的扩展语言)来说也是一样的。Scheme系的Lisp方言区别相对大一些,如果连基本的变量和函数定义都在形式上完全不同的话(当然,思想上是没什么本质区别的),我恐怕初学者从本书中学得Scheme编程思想的机会不大,这种情况下还是推荐《计算机程序的构造和解释》、《Lisp in Small Pieces》和《The Little Schemer》等书籍比较好。
本书可以作为其他Common Lisp语言教材的学习基础。在本书的最后一章里,作者给出了很多后续的教材,在此就不一一重复了。需要特别指出的是,另一本著名的Common Lisp教材《On Lisp》(作者Paul Graham,也就是《黑客与画家》一书的作者)多年前已经被我和我的几位朋友共同翻译成中文版,细心的读者将可以从网上轻易地找到它。《On Lisp》主要介绍Common Lisp的宏编程,这是Common Lisp区别于其他语言甚至其他Lisp方言的最重要特性。我相信一旦读者掌握了本书中关于宏的章节以后就可以阅读《On Lisp》中的进阶内容,从而将自身对编程语言的认识上升到一个新的高度,不过更加符合实用原则的思路还是先把本书读完。
Common Lisp绝不是一门过时的编程语言,整个Common Lisp社区一直都在高速的发展之中,近几年的发展尤为迅速。在我学习Common Lisp的这些年里,我亲眼目睹了几个Common Lisp平台从无到有(ECL、ABCL)或者发展壮大(SBCL、Clozure CL)的过程。经典平台(CMUCL、MCL)也得到了良好的维护并始终跟进操作系统的自然发展。随着计算机硬件的高速发展,即便相对保守的Common Lisp商业平台也开始或即将开始支持对称多处理器(SMP),其中LispWorks和Scieneer CL都以SMP支持作为主要卖点。第三方软件包长足发展,虽然尚未达到Perl社区CPAN的水平,但常用的工具包一应俱全,其中不乏高质量的大型项目。近年来最新的成果Quicklisp包管理平台,更是将Common Lisp第三方软件包的安装过程提升到了前所未有的便捷程度。免费平台越来越好,商业平台依然昂贵,开源工具蓬勃发展,所有这些都暗示着Common Lisp语言还保持着旺盛的生命力,唯一的问题是如何让更多的国内计算机领域爱好者了解它。这就是我翻译本书的目的所在。
过去8年里,我一直活跃在国内和国际Common Lisp社区的前沿。我在大学本科的最后两年学完了Common Lisp语言语法的主要部分,读完了包括本书在内的几本最经典的Lisp书籍,并已经能够在当时最常见的CMUCL平台(CMU Common Lisp)上编写一些简单的程序;后来在网易工作的五年里,我在工作之余从头研究了一遍Lisp语言的发展史,亲身体会了包括Lisp机在内的十几种不同的Common Lisp平台或实现,并自费购买了价值数千美元的商业开发环境LispWorks,拥用三种主流操作系统上的License。在网易从事Linux系统管理工作期间,我用Common Lisp从头实现了一万行源代码规模的SNMP简单网络管理协议工具包,它可以为任何服务器端Common Lisp程序添加通过SNMP协议进行远程监控的能力,也可以作为基于Common Lisp的网络监控系统的基础。我还在过去3年里参与维护了Common Lisp社区两个最重要的可移植网络库之一:usocket,并由于SNMP库的需要将其从原本只支持TCP扩展到了同时支持UDP,其中对于LispWorks的UDP支持代码是完全从头写的,因为官方并不支持。2009年,我向国际Lisp会议的投稿被接受,并作为会议论文集的一部分出版;我是长期担任水木社区函数型编程版的版主之一,专门负责Lisp方向的讨论和技术分享。2011年7月,我离开网易以后开始全职从事商业Lisp软件相关的开发工作。可能我还不是一个很好的译者,但作为一个经验丰富的Common Lisp程序员,我相信自己翻译这本书是合适的。
计算机领域每天都在高速发展,新语言和新技术的产生速度早已超过了一般人的学习速度。对于一个计算机领域的从业人员或爱好者来说,学习通常是为了更好地应用,把所有时间都用来学习而无暇具体应用也是本末倒置。在这种情况下,有选择地学习最有用、最不易变质的知识,以及甄别各种计算机知识的重要程度和相互关系的能力就显得非常重要了。从计算机语言的发展历史来说,如果一门语言可以存活50年,那么它的内在生命力很可能保证其继续长期存活下去,一个人用这门语言写下的代码也将比其他语言的代码更有可能长久地造福后人。
总之,希望这本书能将读者顺利带入Lisp领域。学习一门新的语言总是要花些成本的,但我想说,和其他任何语言相比,花在理解Lisp上的时间和精力将绝对是物超所值的,即便相当多的读者可能没有机会在短期内将Lisp用于他们的日常工作。之所以这样说是有原因的:C和Lisp是编程语言的两个极端,大多数人已经熟悉了C的那一端,但如果他们还熟悉另一端的话,那么迅速理解几乎所有其他的编程语言将不再是问题。

我要回帖

更多关于 ansi common lisp pdf 的文章

 

随机推荐