网站地图
hnsjyk999.com
三九百科 包罗万象
LISP(计算机程序设计语言) 发布于:

LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为应用人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。

LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能 。

20世纪50年代中期,在大多数计算机处理的都是数值数据等,包括语言学、心理学和数学领域上一些人们开始对人工智能产生了兴趣。觉得必须实现共同需要的一个方法,使计算机能够处理链表中的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。IBM是首先对人工智能开发有兴趣的商业机构之一。

1958年夏天,来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)参与IBM资讯研究部的工作,研究符号运算及应用需求。可是,IBM旗下的Fortran表处理语言却未能支援符号运算的递归、条件表达式、动态存储分配及隐式回收等功能。约翰·麦卡锡于1958年秋季回到麻省理工学院后,和Marvin Minsky组成了人工智能项目。开展一个表处理软件系统来实现McCarthy提出建议采纳者程序的工作,尔后推动了表处理语言LISP的诞生 。

1960年4月,麦卡锡以《递回函数的符号表达式以及由机器运算的方式,第一部》为题,于ACM通讯上发表LISP设置。麦卡锡的学生Steve Russell根据该论文,以IBM 704于麻省理工学院的计算机运算中心成功执行了第一版的LISP。

1962年,麦卡锡及人工智能小组按LISP 1的编译基础上改良出LISP 1.5版本。

1969年9月,史丹福大学人工智能实验室的Lynn Quam与Whitfield Diffie推出的Stanford LISP 1.6广泛地被应用于使用TOPS-10系统的PDP-10计算机系中。可是,Stanford LISP 1.6版本自麻省理工智能项目更新LISP 1.5成MACLISP及BBN科技公司推出的InterLisp成功后,渐被弃置。

自1960代末年至1980年初年,各种更新LISP版本涌现,有源自加利福尼亚大学伯克利分校的Franz Lisp、在AutoCAD运行的AutoLISP前身XLISP、犹他大学开展的Standard Lisp及Portable Standard Lisp、专属于Lisp机器上运行的ZetaLisp、源自法国国家信息与自动化研究所的LeLisp、以及MIT人工智能实验室的Gerald Sussman与Guy Steele所开发的Scheme等。

1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。

自稳定运行的Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自欧洲用户的EuLisp、运行于Java虚拟机的Clojure、受到Maclisp影响而创的Emacs Lisp、以及自由开源来自卡内基·梅隆大学的CMUCL、还有IsLisp,Racket,ACL2等蓬勃涌现。

自2000年起,LISP共享者合力支援的自由开源社区逐渐形成,致力于LISP后续发展。

2002年10月,第一届国际LISP会议于美国旧金山开展,其后LISP大会不定期于全球各地举行,包括2014年在加拿大蒙特利尔大学以移动概念作主题的会议 。

LISP为函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现。

LISP没有命令式语言程序中常见赋值语句和变量,重复的过程可以使用递归的函数调用来表示,并不需要使用循环模式。

LISP是古老的函数语言、弱类型、动态推断,其代码本身就是各种列表。每一个表项均可以储存任何类型的数据如数字、函数、符号或一个子表等,在编码时,可以随时操作以更新列表。

LISP核心的操作符只有7个操作符:quote、atom、eq、car、cdr、cons、cond。前三者quote、atom、eq用于符号的推断;car、cdr、cons操纵表格;cond负责分支判断。这种简洁定义,非常接近图灵机原型的纯函数式语言,是现代语言完全无法比拟的。

LISP作为弱类型这优点相对缺点则是运行效率的低下。原始定义简洁的缺点使到大型开发工程变得困难,自底层到高层,自二维表查询到面向对象,使用者需要嵌入更多的函数来实现,致使LISP众多方言的衍生 。

LISP只有两种数据结构,原子(atom)和(list)。原子为标识符形式的符号或数字的字面值,表则是由零个或多个表达式组成的序列。基本上,LISP程序,并不需要使用一般表处理所必需的任意插入及删除操作。

LISP的语法是简洁的典型,程序代码与数据的形式完全相同,以圆括号为边界的表。例如,表:

(A B C D)

按数据来解释时,它是一个有4个元素的表,按代码来解释时,它是将名为A的函数作用于3个参数B、C和D。

指定表结构时将表的元素放在圆括号中,简单表的元素仅限原子而成的方式是:

(A B C D)

嵌套表结构亦是以圆括号来表示,例如,表:

(A (B C) D (E (F G)))

由4个元素组成。

第1个元素是原子A,第2个是子表(B C),第3个是原子D,第4个是子表(E(F G)),它的第2个元素是子表(F G)。

LISP是一个函数式程序语言,并无关键字或保留字设,置使用者可自行再定义。

LISP语法,可透过执行Hello World程序来体现。此程序透过XLISP-STAT 2.1,3.45Beta版编译器执行。

语言组成信息来源

衍生LISP语言曾认证于以下标准:

ANSI X3.226-1994 - 1994年,程式语言Common Lisp(Common Lisp Programming language )

IEEE standard 1178–1990 (R1995) 1995年, 程式语言Scheme(Scheme Programming language )

ISO/IEC 13816:1997- 1997年,程式语言ISLISP(ISLISP Programming language )已撤回

ISO/IEC 13816:2007 - 2007年,程式语言ISLISP(ISLISP Programming language )

LISP是函数式程序设计的先锋,其诸多革命性的创新思维影响了后续编程语言的发展,亦完全垄断人工智能领域的应用长达三分之一个世纪。曾在开展初年出现的低效率因素亦在集体改良中被移去,成就了广被应用于软件开发、电子商务及金融系统的Common Lisp、Scheme、Emacs Lisp和Clojure等 。


相关文章推荐:
人工智能 | 函数式程序设计 | C | Fortran | Java | C# | 结构化程序设计 | 约翰·麦卡锡 | λ演算 | 递归 | 计算机程序设计语言 | 约翰·麦卡锡 | JavaScript | Perl | Ruby | Python | 人工智能 | 麻省理工学院 | 约翰·麦卡锡 | John McCarthy | Fortran | ACM | 史丹福大学 | BBN科技公司 | AutoCAD | AutoLISP | 犹他大学 | 法国国家信息与自动化研究所 | Scheme | 事实标准 | Common Lisp | 美国国家标准学会 | Java虚拟机 | Clojure | Emacs | 卡内基·梅隆大学 | CMUCL | ACL2 | 蒙特利尔大学 | 函数式程序设计 | 递归 | 操作符 | 图灵机 | 二维表 | 面向对象 | Common Lisp | Scheme | Emacs | Clojure |