
LISP(全名LISt Processor,即链表处理语言),由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。
LISP有很多种方言,各个实现中的语言不完全一样。1980年代Guy L. Steele编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。在Unix/Linux系统中,还有一种和Emacs一起的Emacs Lisp(而Emacs正是用Lisp编写的)非常流行,并建立了自己的标准。
LISP语言的主要现代版本包括Common Lisp和Scheme。
目录 |
LISP 是第一个函数型编程语言,主要应用在人工智能(AI)上,包含语多字符撷取函数,供作自然语言的分析之用。
Lisp的表达式是一个原子(atom)或表(list),原子(atom)又包含符号(symbol)与数值(number);表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:
abc () (abc xyz) (a b (c) d)
最后一个表是由四个元素构成的,其中第三个元素本身也是一个表,这种 list 又称为嵌套表(nested list)。
正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。
Lisp 的 7 个公理(基本操作符):
(quote x) 返回 x,我们简记为 'x
(atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。
> (atom 'a) t > (atom '(a b c)) () > (atom '()) t
现在我们有了第一个需要求出自变量值的操作符,让我们来看看 quote 操作符的作用——通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom 将其视为代码,例如:
> (atom (atom 'a)) t
反之一个被引用的表仅仅被视为表
> (atom '(atom 'a)) ()
引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用 quote 来区分它们。 (eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 ()
> (eq 'a 'a) t > (eq 'a 'b) () > (eq '() '()) t
(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如:
> (car '(a b)) a
(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:
> (cdr '(a b c)) (b c)
(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如:
> (cons 'a '(b c)) (a b c) > (cons 'a (cons 'b (cons 'c ()))) (a b c)
下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
(format t "Hello, world!~%")
|
查 • 论 • 编 • 历
|
|
|---|---|
| 工业编程语言 | A+ - Ada - 汇编语言 - B - Brainfuck - COBOL - Curl - D - Eiffel - Erlang - FORTRAN - IronPython - Java - Jython - LISP - Lua - SCILAB - MATLAB - MATHEMATICA - Nuva - Oberon - OCaml - Perl - PHP - PostScript - Powerbuilder - Python - R - REXX - Ruby - Self - Smalltalk - Tcl/Tk - C# - F# - J# - Microsoft Visual C# |
| C/C++语言 | C - C++ - Turbo C++ - Borland C++ - C++ Builder- C++/CLI - Objective-C - Microsoft Visual C++ |
| BASIC语言 | BASIC - BASICA - GW-BASIC - QBASIC - QuickBASIC - True BASIC - Turbo BASIC - PowerBASIC - DarkBASIC - ETBASIC - GVBASIC Visual Basic .NET - Visual Basic - VBScript - VBA |
| Pascal/Delphi语言 | Pascal语法:(Pascal - Turbo Pascal - Object Pascal - Free Pascal) Pascal+Delphi语法:(Delphi) |
| ECMAScript方言 | ActionScript - DMDScript - JavaScript - JScript |
| GPU用着色器语言 | Cg - GLSL - HLSL |
| 学术编程语言 | APL/J - Clean - Haskell - Logo - ML - Prolog - Scheme - SAC |
| 数据库相关编程语言 | Clipper - Visual FoxPro - SQL - SQL預存程序 |
| 其他编程语言 | ALGOL - Forth - Modula-2/Modula-3 - MUMPS - PL/I - Simula |
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History