----------COPY FORM IINTERNET
约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如欧几里德对几何的贡献.1 他向我们展示了,在只给定几个简单的操作符和一个表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据结构表(list)来代表代码和数据.
值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时代的大事, 而且是一种在我们这个时代编程越来越趋向的模式.我认为目前为止只有两种真正干净利落, 始终如一的编程模式:C语言模式和Lisp语言模式.此二者就象两座高地, 在它们中间是尤如沼泽的低地.随着计算机变得越来越强大,新开发的语言一直在坚定地趋向于Lisp模式.
二十年来,开发新编程语言的一个流行的秘决是,取C语言的计算模式,逐渐地往上加Lisp模式的特性,例如运行时类型和无用单元收集.
LISP的由来
LISP是一种计算机的表处理语言,是函数型语言。它是LIST Processing 的缩写,是研究人工智能的有力工具。
LISP 最初是作为书写字符与表的递归函数的形式系统出现的,1958年由美国麻省理工学院(MIT)的AI小组提出(要为问答系统设计一种语言),1960年由 MIT的John.McCarthy教授(麦卡西教授,举世闻名的计算机科学家,图灵奖获得者,后为美国斯坦福大学教授)整理成统称为LISP1.0的形式发表,然后开始流行于AI界.以后陆续出现了LISP1.5(1962年),LISP1.6,MACLISP,INTERLISP, COMMONLISP,GCLISP,CCLISP等等变种。商业中一般认Berkeley(加洲大学)的LISP1.5为规范,但以目前的发展看, COMMON LISP将成为一种标准,有统一各种LISP “方言”的趋势。在众多不同版本的流行LISP语言中,使用最广泛的是INTER LISP(XEROX公司开发),MACLISP(麻省理工学院开发)和COMMON LISP。LISP是继FORTRAN(FORTRAN是1954年提出,1956年开始使用)之后出现的第二个古老的(1958年提出,1960年开始使用)计算机高级语言,至今使用近四十年仍受重视,并为人工智能的发展作出了不可磨灭的贡献.由此可见LISP是一门历史悠久,用途广泛,功能极强,生命力极强的人工智能程序设计语言。
LISP语言一般为解释型语言(即由解释程序边解释边执行),但也有了编译型的LISP语言,并已经有了专用的LISP机。例如,编译型的LISP语言SCHEME诞生于麻省理工学院,1984年由美国15个大学和公司共同提供了被广泛接受的SCHEME标准。德克萨斯仪器公司于1985年在IBM PC机上实现了称为PC SCHEME的语言。PC SCHEME的中文版由南京大学和武汉大学联合开发,可在640KB以上的PC机上在CCDOS和MSDOS下运行并可访问其它DOS程序。
LISP语言的主要特点(优点)
(1) LISP具有和图灵机相同的(也就是理论上最高的)计算能力;
在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(也就是理论上最高的)计算能力,通常指的是自然数集上的递归函数。这个结论对符号集上的递归函数也成立。J.McCarthy在LISP中设计了一套符号处理函数,它们具有符号集上的递归函数的计算能力,因此原则上可以解决人工智能中的任何符号处理问题。
(2)数据类型的唯一性,程序与数据的一致性;
LISP的数据类型和句法结构简单,甚至简单到具有唯一性和一致性:其数据和程序的表现形式是一样的, 都是用S-表达式一种形式.基本的数据结构是表(表是S-表达式的特例)。
(3)数据和程序的 等价性;
LISP的数据和程序不仅类型一致,而且作用也等价;
即:程序可作为数据被处理,数据也可作为程序来执行。
(4)LISP一切功能由函数来实现,程序的运行就是求值;
LISP程序的通常形式是一串函数定义,其后跟着一串带有参数的函数调用,函数之间的关系只是在调用执行时才体现出来。
(5)LISP语言的控制结构以递归为主;
大多数语言使用的控制结构是以循环为主的,有的程序语言允许递归,而LISP以递归形式为主。递归是LISP能力的源泉。当然现在LISP也有循环结构和迭代。
(6)原子可以有任意多个值(特性值);
LISP非常重要的一个特点是每个文字原子可以加许多特性,每个特性有一个特性表及对应的特性值。由于原子的多值性给使用者带来很多方便,给问题表示带来好处,使LISP很好用。
(7)LISP具有表的结构形式和规模的灵活性,不必预先设定;
(8)具有收集无用单元的功能。
LISP语言的主要缺点
(1)初学者不容易习惯LISP的句法结构,特别是多层表的括号配对写法;
(2)数据类型少(常用的只有表和原子),使其表达能力受限;
(3)规范性差(无标准版本,不同的LISP文本间差别较大);
(4)程序的可读性不及一般的高级语言;
(5)执行速度慢。
LISP 执行速度慢的原因有几个:(1)一般的 LISP是解释型, 程序边解释边执行当然比编译型慢;(2)LISP的控制结构主要是递归,递归费时间费空间;(3)内存空间动态变化。LISP不要求用户在程序 中写一些用来指示内存分配的说明语句,全部内存必须动态的分配,直到没有空间时才开始收集无用单元。
分享到:
相关推荐
麦卡锡称这种语言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据结构表(list)来代表代码和数据. 值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时代的大事, 而且是一种在我们这个时代...
Lisp之根源.mht
- **资源分配与项目实施**:问题根源在于资源未得到有效利用或错误配置,很多潜在的Lisp应用解决方案并未得到充分认识,有前景的项目未能启动,实施策略未能激活。 #### 4. 人工智能领域的影响 - **AI与Lisp的关系...
自己收集的几个lisp语言相关的教程,具体如下: 1. Lisp之根源---对lisp的简要描述 2. 《Common Lisp》第二版 3. 《GNU_Emacs_Lisp_PROG》 4. LISP语言教程----一个其他童鞋整理的doc资料
Mineral.js是浏览器中的另一个Lisp,它是在阅读Paul Graham撰写的“ Lisp的根源”论文后开始练习的。 Mineral的语法在很大程度上受Clojure的启发。 原语 通用原语: quote atom eq head tail cons if fn ...
Lisp之根源.pdf Racket图文教程.pdf scheme-primer.pdf schem-r5rs_cn.pdf The_Little_Schemer.pdf 通过Scheme看函数式编程.pdf Write_Yourself_a_Scheme_in_48_Hours.pdf The+Seasoned+Schemer.pdf
- **Lisp**:Shen语言的根源,Lisp是一类古老且强大的函数式编程语言,以其括号表达式(S-表达式)和高度可读的代码结构著名。 - **interpreter**:这表明shentong可能是一个Shen语言的解释器,可以执行Shen代码而...
它的设计灵感来源于Lisp和ML(Meta Language)家族,SML具有严格的类型检查,可以防止许多运行时错误,从而提高代码的可靠性和可维护性。 **SML NJ 错误消息** SML NJ,即Standard ML of New Jersey,是SML的一个...
EmACT的根源可以追溯到Conroy的MicroEMACS,一个在1985年开发的文本编辑器。尽管其基础较早,但EmACT已经进行了大量的改进和扩展,以适应现代操作系统的需求。 首先,EmACT对UNICODE的支持意味着它能够处理多种语言...
首先,让我们从基础开始,Racket的语法简洁明了,其Lisp家族的根源使得它具有高度的表达性。函数是其基本构建块,通过组合函数,我们可以构建出复杂的程序结构。在书中,你将会学习到如何定义和使用函数,以及如何...
在IT行业中,Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java平台的广泛生态系统。本文将深入探讨“pretty”库,这是一个专门为Clojure设计的工具,旨在使开发者能够更美观、...