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科技公司推出的 Inter Lisp成功后,渐被弃置。

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

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

自稳定运行的Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自 欧洲 用户的EuLisp、运行于Java 虚拟机 的 clojure 、受到 Maclisp 影响而创的EmacsLisp、以及自由开源来自 卡耐基·梅隆大学 的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 等。