ansi common lisp pdf,
acl1
序言约翰麦卡锡和他的学生在1958年开始第一次实现Lisp。Lisp在Fortran之后。
仍在使用的最古老的语言。1更何况现在还是编程语言技术的前沿。明白;理解
Lisp程序员会告诉你,这种语言有一些与众不同的地方。
Lisp的特别之处在于它被设计成可以自我进化。你可以用Lisp定义新的
Lisp运算符。随着新的抽象概念越来越流行(比如面向对象编程),我们总是发现
用Lisp实现它们很容易。像DNA一样,这样的语言不会过时。
为什么新工具要学习Lisp?因为它允许你做用其他语言做不到的事情。如果你只想写一个
函数返回小于n的非负整数之和,那么使用Lisp和C类似:
;Lisp /* C */
(defun sum (n) int sum(int n){
(let ((s 0)) int i,s=0;
(dotimes(I n s)for(I=0;我我)
(incf s I))))s=I;
退货单;
如果你只想做这么简单的事,用哪种语言都没关系。假设你想写一个函数。
接受数字n并返回一个函数:它将n加到它的自变量上:
;咬舌
(defun addn)
# ((x)
(x n)))
C语言中的addn会是什么样子?根本写不出来。
你可能会想,谁会想做这样的事?编程教你不要试图去做他们没有提供的东西。
事情。当你用某种语言写程序时,你必须用那种语言思考,你希望无法描述它。
事情很难办。当我第一次开始用Basic写程序时,我不想要递归,因为
因为我根本不知道这事发生了。我认为基本上。我只有递归算法的概念。为什么我
想要递归?
如果你不渴望逻辑封装(在上面的例子中使用的),请相信当前的Lisp进程
程序员一直在用。很难找到不使用封装的任何长度的Lisp代码。在第112页,你将
自己用吧。
封装只是我们在其他语言中找不到的抽象概念之一。另一个更有价值的Lisp
LISP的独特之处在于Lisp程序是用Lisp的数据结构来表示的。这意味着你可以写啊写。
程序。人们真的需要这个吗?是的——它们被称为宏,有经验的程序。
我一直在用它。到173页就可以自己写宏了。
凭借宏、封装和运行时类型,Lisp超越了面向对象编程。如果你理解了上面的句子,
也许你不需要看这本书。你必须非常了解Lisp,才能明白它为什么不是谎言。但是这个
不仅仅是说说而已。这是一个重要的论点,它的证明清楚地写在第17章的代码中。
来了。
第2章到第13章将逐步介绍理解第17章代码所需的所有概念。你的努力会
物有所值,比如:用C编程你会感到窒息,就像有经验的C程序员一样。
基础编程会觉得窒息。更令人鼓舞的是,如果我们想想这种感觉
怎么会。Basic扼杀了习惯C的人,因为有经验的C程序员都知道,没有办法用Basic。
同样,学习Lisp不仅让你学习一门新的语言——它还会教你
一种新的更强大的方式来考虑程序。
正如前面提到的,Lisp提供了其他语言所不能提供的工具。但远不止这些。单独的
总的来说,伴随Lisp而来的新事物——自动内存管理、显式类型、封装等等——每一个。
所有这些都使编程变得更容易。它们一起形成了一个临界值,从而产生了一种新的编程方法
成为可能。
Lisp被设计成可扩展的:它允许你定义自己的操作符。因为Lisp是由和你的程序一组成的
示例函数和宏。所以扩展Lisp就像写Lisp程序一样简单。事实上,是这样的
它如此简单(而且有用),以至于扩展这种语言成了标准做法。当你写一个向下接近语言的程序时
有时,你也在构建语言来接近你的程序。你也是从上到下工作。
几乎所有的程序都可以受益于适应他们自己需求的语言剪裁,但是越多的程序
复杂的,自下而上的设计方法更有价值。自底向上的程序可以写成一系列
层,每一层都充当前一层的编程语言。TEX是最早用这种方式编写的程序之一。你可以
用任何语言自下而上地设计程序,但是Lisp是这种风格最自然的载体。
自底向上的编程自然会产生可扩展的软件。如果一直坚持自下而上的编程,那就不能太懒。
直到你程序的最高级别,这个级别就变成了用户的可编程语言。可扩展性的概念。
深深植根于Lisp,成为编写可扩展软件的理想语言,在80年代最为成功。
其中三个程序提供Lisp作为扩展语言:Gnu Emacs、Autocad和Interleaf。
自底向上也是获得可重用软件的最佳方式。编写可复用软件的本质是将共性相互分离。
做爱。而自下而上的方法自然就造成了这种分离。而不是花费你所有的精力
写一个巨大的应用程序,但是用一部分能量去构造一个
语言,用你的一部分精力(相对较小的比例)用这种语言写你的应用。和应用有关。
特性都集中在顶层,下面几层可以形成一种类似于这个应用程序的编写语言。
应用程序——有什么比编程语言更具可重用性?
Lisp不仅允许你编写更复杂的程序,而且速度更快。Lisp程序通常很短——这种语言
它给你一个更大的思路,所以你不需要用很多。正如弗雷德里克布鲁克斯(Frederick Brooks)指出的,写一个程序需要很长时间。
往往取决于它的长度。所以这个事实意味着编写Lisp程序花费的时间更少。
Lisp的动态特性放大了这种影响:在Lisp中,编辑-编译-测试周期如此之短,
因此编程是实时的。
更大的抽象和交互式环境可以改变组织开发软件的方式。术语“快速原型”
本文描述了一种最早在Lisp中使用的编程方法:在Lisp中,你可以写一个带比值的规格说明。
写一个原型需要的时间更少,而且这个原型很抽象,可以作为比用英文写更好的原型。
更好的规格。Lisp允许你从原型到产品软件的平稳过渡。写作时
Lisp程序的编译考虑到了速度。它们是由现代编译器编译的,它们与用其他高级语言编写的类似。
这个程序运行得一样快。
除非你对Lisp相当熟悉,否则这篇前言就像一堆夸夸其谈、毫无意义的语句。Lisp优于其他。
编程对象?你构造语言来接近你的程序?Lisp编程是实时的?这些字是什么?
意思?现在这些语句就像一些空湖。随着您对Lisp实际特性的了解越来越多,请看
越有启发性的程序实例,越会充满实践经验,越有确定的形状。
这本书的目标之一不仅仅是解释Lisp语言,而是由Lisp引起的一种新方法。这是一个
一种让你以后认识更多人的方式。随着编程环境变得越来越强大,编程语言也变得越来越有吸引力。
例如,Lisp编程风格正在逐渐取代旧的计划然后实现的模式。
在旧模型中,bug应该永远不会出现。提前做好详细的说明是应该的。
以确保程序完美运行。理论上听起来不错。可惜规范是人写的。
是的,也是人实现的。实际的结果是,先计划后实现的方法效果并不太好。
作为OS/360项目的经理,弗雷德里克布鲁克斯对这种传统方法非常熟悉。他也不是。
常熟意识到了它的后果:
任何OS/360的用户都会很快意识到它应该做得多好.而产品已经晚了,它用
比原方案多了内存,成本是预估的好几倍,直到第一版都不太好用。
这之后的几个版本。2
这是对那个时代最成功的系统之一的描述。
旧模式的问题在于它忽略了人的局限性。在旧模型中,你打赌规格不会是严肃的
缺陷,实现它们只是将它们翻译成代码的简单事情。经验证明,这确实是一件坏事
很好的赌注。如果你打赌规范会出错,那么代码充满错误会更安全。
事实上,这是新的编程模型所假设的。它试图尽可能降低错误的成本,而不是期望人。
学生不会犯错。错误的代价是改正错误所花费的时间。使用强大的语言和优秀的编程循环。
这种成本会大大降低。编程可以少依赖规划,多依赖探索。
有线电视。
计划是必要的罪恶。这是对风险的一种反应:工作越危险,你就越应该提前计划。
重要。强大的工具降低了风险和规划需求。程序的设计可以从
从经验中获益——这可能是最有用的信息来源。
自20世纪60年代以来,Lisp风格一直朝着这个方向发展。用Lisp可以写的这么快。
原型,这样你可以经历几个周期的设计和实现,而在旧的模型中,你可能刚刚写完。
规格。你不用太担心设计缺陷,因为你会更早发现。你不必太
担心虫子。当您以函数式风格编程时,错误只会产生局部影响。当你使用一个非常
抽象的语言,有些错误(比如悬挂指针)是永远不会出现的,而其余的很容易发现,
因为你的程序更短。当您拥有一个交互式开发环境时,您可以立即纠正错误,而不必通过编程。
一个漫长的编译、编译、测试的过程。
Lisp风格发展这么大,是因为结出了果实。这听起来很奇怪,但是计划越少意味着越好。
在设计和科技史上,类似的例子数不胜数。类似的事件发生在15世纪的绘画中。
油画颜料普及之前,画家画的是一种叫蛋彩画的物质,不能混合,也不能遮盖。错误的
高昂的价格使画家变得保守。后来油画的出现,画风发生了很大的变化。
改变。油画````允许第二个想法。“3它提供了处理困难的主题,如人物画等。
决定性的优势。
新媒体不仅使画家更容易绘画,也使新的和更雄心勃勃的绘画方式成为可能。
詹森写道:
如果没有油画颜料,佛兰德大师们征服看得见的现实的口号就会大打折扣。所以从
从技术的角度来看,他们也无愧于被称为“现代绘画之父”,因为油画颜料已自
成为画家的基本媒介。四
鸡蛋色作为一种材料,并不逊色于油画颜料,只是油画颜料的弹性给人更多的想象空间。
空间——这是决定性因素。
程序设计正在经历类似的变化。新的媒介是“面向对象的动态语言”,也就是说
口齿伶俐。并不是说几年内我们所有的软件都要用Lisp写。从鸡蛋颜色到油颜色的转变也
这不是一蹴而就的;油画开始只在一些领先的艺术中心流行,而且经常
结合鸡蛋颜色。我们现在好像就在这个阶段。Lisp在大学、实验室和一些
与此同时,借用Lisp的思想越来越多地出现在主流中:交互。
开发环境、垃圾收集和运行时类型只是几个例子。
强大的工具正在降低勘探的风险。这对程序员来说是个好消息,因为这意味着我
我们可以开展更雄心勃勃的项目。油彩的涂抹确实有这样的效果。它通过后的时期是积极的。
这是绘画的黄金时代。编程领域也出现了类似的迹象。
关于此文档.该文档是使用
LaTeX2HTML翻译器2K.1beta版(1.48)
版权1993,1994,1995,1996,
尼科斯德拉克斯,
利兹大学基于计算机的学习单元。
版权1997,1998,1999,
罗斯摩尔,
悉尼麦考瑞大学数学系。
命令行参数是:
latex2html -split=0 acl1.tex
翻译由戴玉文于2004年4月3日发起
脚注.
仍在使用的最古老的语言。1麦卡锡,约翰。符号表达式的递归函数
和他们的计算机计算,第一部分。CACM,3:4(四月
1960年版,第195—184页。
这本书后来的几个版本。2弗雷德里克布鲁克斯,《神话中的人月》。艾迪森-韦斯利,
读书(马),1975年,第16页。快速原型不仅是一种更快或更好的编写程序的方法,而且一些程序可能是没有这种方法的基础。
我写不出来。
即使是最雄心勃勃的人也会在巨大的工作面前退缩。如果他们能说服自己,他们不需要这么做。
这需要付出很多努力(即使是表面上的),从这开始会比较容易。所以才会有这么多大事。
从小事做起。快速原型让我们从小事开始。
.油画````允许第二个想法。默里,彼得和琳达。文艺复兴时期的艺术。泰晤士河
和哈德逊,伦敦,1963年,第85页。
成为画家的基本媒介。4 Janson,W.J,《艺术史》,第三版。纽约艾布拉姆斯,
1986年,第374页。这个比喻只适用于画布上的绘画。墙上的画还是用壁画。我也不是说
绘画风格是由技术变革驱动的;相反的说法可能更接近事实。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。