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