IronLisp是Lisp在Microsoft.NET Framework上的一个实现。它由Xacc.ide在2007年7月23日发表。IronLisp已被IronScheme替代,将不会有更进一步的开发。
简介IronLisp是Lisp在Microsoft.NET Framework上的一个实现。它由Xacc.ide在2007年7月23日发表。IronLisp已被IronScheme替代,将不会有更进一步的开发。
IronLisp的Beta版本已经在Microsoft Public License授权协议下发布。
LISPLISP是具有悠久历史的计算机编程语言家族,有独特和完全括号的前缀符号表示法。起源于公元1958年,是现今第二悠久而仍广泛使用的高阶编程语言。只有FORTRAN编程语言比它更早一年。LISP编程语族已经演变出许多种方言。现代最著名的通用编程语种是Common Lisp和Scheme。
LISP最初创建时受到阿隆佐·邱奇的lambda演算的影响,用来作为计算机程序实用的数学表达。因为是早期的高阶编程语言之一,它很快成为人工智能研究中最受欢迎的编程语言。在计算机科学领域,LISP开创了许多先驱概念,包括:
树结构
自动存储器管理
动态类型,条件分支
高阶函数
递归
自主(self-hosting)编译器
读取﹣求值﹣输出循环(Read-Eval-Print-Loop,REPL)
LISP名称源自列表处理器(英语:List Processor)的缩写。列表是LISP的主要数据结构之一,LISP编程代码也同样由列表组成。因此,LISP程序可以把源代码当作数据结构进行操作,而使用其中的宏系统,开发人员可将自己定义的新语法或领域专用的语言,嵌入在LISP编程中。
代码和数据的可互换性为LISP提供了立即可辨识的语法。所有的LISP程序代码都写为S-表达式或以括号表示的列表。函数调用或语义形式也同样写成列表,首先是函数或操作符的名称,然后接着是一或多个参数:例如,取三个参数的函数f即为f(arg1,arg2,arg3)。
LISP语言的主要现代版本包括Common Lisp,Scheme,Racket以及Clojure。1980年代盖伊·史提尔二世编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。还有一种是编辑器Emacs所派生出来的Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,并创建了自己的标准。1
LISP历史20世纪1955年至1956年间,信息处理语言被创造出来,用于人工智能处理(早期的基于符号处理的人工智能领域,以图灵测试为目标)。此领域中有研究者持有观点:“符号演算系统可以派生出智能。”。它首先使用了列表(抽象数据类型)与递归。
1958年,约翰·麦卡锡(John McCarthy,1927年9月4日-2011年10月24日)在麻省理工学院发明了LISP编程语言,采用了信息处理语言的特征。1960年,他在《ACM通讯》发表论文,名为《递归函数的符号表达式以及由机器运算的方式,第一部》(Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I)。在这篇论文中阐述了只要通过一些简单的运算符,以及用于函数的记号,就可以创建一个具图灵完备性语言,可用于算法中。
麦卡锡最初使用M-表达式写代码,之后再转成S-表达式,举例来说M-表达式的语法,car[cons[A,B]],等同于S-表达式的(car (cons A B))。然而由于S-表达式具备同像性的特性(homoiconic,即程序与数据由同样的结构存储),实际应用中一般只使用S-表达式。此外他也借用了信息处理语言中的许多概念。
约翰·麦卡锡的学生史帝芬·罗素在阅读完此论文后,认为LISP编程语言当中的eval函数可以用机器码来实做。他在IBM 704机器上,写出了第一个LISP解释器。1962年,蒂姆·哈特(Tim Hart)与麦克·莱文(Mike Levin)在麻省理工学院以LISP编程语言,实做出第一个完整的LISP编译器。这两人在笔记中使用的语法比麦卡锡早期的代码更接近现代LISP风格。
然而使用20世纪70年代当时的编译器技术和硬件,要实现LISP还是困难的挑战。由研究生丹尼尔·爱德华兹所开发的垃圾收集程序,使得在通用计算机上运行LISP变得实用,但效率仍然是一个问题。这导致了LISP专用机器的创建:用于运行LISP环境和程序的专用硬件。之后计算机硬件和编译器技术的发展迅速,使得昂贵的LISP专用机器过时。
公元2000年迄今在20世纪90年代衰退之后,Lisp最近十年来因一些关注而逐渐复苏。大多数新活动都集中在Common Lisp,Clojure,Racket,Scheme和Emacs Lisp的实现上,包括开发新的跨平台库和应用。当其他人认为Lisp已经是过时陈旧的,如保罗·格雷厄姆和埃里克·雷蒙等人继续出版有关于LISP编程的著作,一些新的开发人员受到这些作者启发,经常将LISP这种语言描述为令人大开眼界的经验,并声称在本质上比较其它编程语言更有生产效率。这种意识的提高可对比于,如同Lisp在90年代中期“人工智能冬季”的短暂增长。
Dan Weinreb在他的调查中,列出了11个积极维护中的Common Lisp实现。Scieneer Common Lisp是一个新的实现商业化产品,由CMUCL于2002年首次发布。
开源社区创建了新的支持基础:CLiki是个收集Common Lisp相关信息的维基,Common Lisp目录列出了资源,#lisp是一个受欢迎的IRC频道,可以共享和注释代码片段(在lisppaste的支持下,一个用Lisp编写的IRC机器人),Planet Lisp收集了各种 Lisp相关博客的内容,LispForum用户讨论Lisp主题,Lispjobs是个公布职缺机会的服务,还有一个Weekly Lisp News提供每周新闻。Common-lisp.net是开源项目的托管站点。Quicklisp则是含括了许多库的装载管理器。
LISP50@OOPSLA庆祝了Lisp的50周年(1958-2008)。在波士顿,温哥华和汉堡有定期的当地用户会议。其他活动包括欧洲共同Lisp会议,欧洲Lisp专题讨论会和国际Lisp研讨会。Scheme社区积极维护了二十多个实现。在过去几年中已开发了数个有意义的新实现(Chicken,Gambit,Gauche,Ikarus,Larceny,Ypsilon),Scheme社区广泛接纳了R5RS语言标准。Scheme需求实现过程创建了很多预备标准库和Scheme扩展功能。各种 Scheme实现的用户社区持续地增长。
一个新的语言标准化过程于2003年开始,并在2007年产生了R6RS标准,而使用Scheme介绍计算机科学课程的学校似乎有所减少。麻省理工学院的计算机科学入门课程,已经不再使用Scheme。
有几种新的Lisp方言:Arc,Hy,Nu,Clojure,Liskell,LFE(Lisp Flavored Erlang)和Racket。2
LISP基本介绍LISP是第一个函数式程序语言,区别于C语言、Fortran等命令型程序语言和Java、C#、Objective-C等面向对象程序语言。由于历史的原因,Lisp长期以来被认为主要用于人工智能领域,但Lisp并不是只为人工智能而设计,而是一种通用的程序语言。
Lisp的表达式是一个原子(atom)或列表(list),原子又包含符号(symbol)与数值(number);列表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:
abc()(abc xyz)(a b (c) d)最后一个列表是由四个元素构成的,其中第三个元素本身也是一个列表,这种又称为嵌套列表(nested list)。
正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。3
参见Common Lisp
Prolog
Scheme
SICP
Clojure
本词条内容贡献者为:
王慧维 - 副研究员 - 西南大学