跳转到内容

LISP:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Jobinson99留言 | 贡献
中文化该程序语言
Jobinson99留言 | 贡献
第37行: 第37行:
正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。
正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。


===Lisp 的 7 个公理(基本操作符):===
=== 的 7 个公理(基本操作符):===


'''基本操作符1 quote'''
'''1 quote'''


(quote x) 返回 x,我们简记为 'x
(quote x) 返回 x,我们简记为 'x
第50行: 第50行:
</source>
</source>


'''基本操作符2 atom'''
'''2 存否 atom'''


(atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。
(atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。
第71行: 第71行:
()
()
</source>
</source>
引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用 quote 来区分它们。
引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用 quote 来区分它们。


'''基本操作符3 eq'''
'''3 同否 eq'''


(eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 ()
(eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 ()
第85行: 第85行:
</source>
</source>


'''基本操作符4 car'''
'''4 取首 car'''


(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如:
(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如:
第93行: 第93行:
</source>
</source>


'''基本操作符5 cdr'''
'''5 除首 cdr'''


(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:
(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:
第101行: 第101行:
</source>
</source>


'''基本操作符6 cons'''
'''6 合成 cons'''


(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如:
(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如:
第111行: 第111行:
</source>
</source>


'''基本操作符7 cond'''
'''7 寻果 cond'''


(cond (p<sub>1</sub> e<sub>1</sub>) ...(p<sub>n</sub> e<sub>n</sub>)) 的求值规则如下. 对“条件表达式p”依次求值直到有一个返回t. 如果能找到这样的p表达式,相应的“结果表达式e”的值作为整个cond表达式的返回值.
(cond (p<sub>1</sub> e<sub>1</sub>) ...(p<sub>n</sub> e<sub>n</sub>)) 的求值规则如下. 对“条件表达式p”依次求值直到有一个返回t. 如果能找到这样的p表达式,相应的“结果表达式e”的值作为整个cond表达式的返回值.
第119行: 第119行:
second
second
</source>
</source>

===函数===
===函数===
当表达式以七个原始操作符中的五个开头时,它总会对其自变量求值的. 我们称这样的操作符为函数 .
当表达式以七个原始操作符中的五个开头时,它总会对其自变量求值的. 我们称这样的操作符为函数 .

2011年2月20日 (日) 00:01的版本

历Lisp
编程范型多范型: 函数式, 过程式, 反射式, 元编程
設計者约翰·麦卡锡
實作者Steve Russell, Timothy P. HartMike Levin
发行时间1958
型態系統动态类型, 强类型
衍生副語言
Common Lisp, Scheme, Emacs Lisp, AutoLISP, Logo, Clojure, ISLISP, Newlisp, Arc, SKILL, Racket
啟發語言
IPL
影響語言
ML, Perl, Python, Smalltalk, Ruby, Dylan, Haskell, Mathematica, REBOL, Qi, Lua, JavaScript, LPC, Forth, Nu语言, OPS5, CLU, Falcon, Io语言, Ioke, MDL, FPr

(英文全名LISt Processor,即列表处理语言),由约翰·麦卡锡1960年左右创造的一种基于λ演算函数式编程语言

历有很多种方言,各个实现中的语言不完全一样。1980年代Guy L. Steele编写了通历(Common Lisp)试图进行标准化,这个标准被大多数解释器和编译器所接受。在Unix/Linux系统中,还有一种和易码器(Emacs)一起的Emacs Lisp(而易码器正是用历作为扩展语言进行功能扩展的)非常流行,并建立了自己的标准。

历语言的主要现代版本包括Common LispScheme

基本介绍

历 是第一個函數型程式語言,主要應用在人工智能(AI)上,包含語多字元擷取函數,供作自然語言的分析之用。

历 的表达式是一个原子(atom)或表(list),原子(atom)又包含符號(symbol)與數值(number);表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:

abc
()
(abc xyz)
(a b (c) d)

最后一个表是由四个元素构成的,其中第三个元素本身也是一个表,這種 list 又稱為嵌套表(nested list)。

正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。

历 的 7 个公理(基本操作符):

1 quote

(quote x) 返回 x,我们简记为 'x

> (quote a)
a
> 'a
a

2 存否 atom

(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))
()

引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 历 最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用 quote 来区分它们。

3 同否 eq

(eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 ()

> (eq 'a 'a)
t
> (eq 'a 'b)
()
> (eq '() '())
t

4 取首 car

(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如:

> (car '(a b))
a

5 除首 cdr

(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:

> (cdr '(a b c))
(b c)

6 合成 cons

(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如:

> (cons 'a '(b c))
(a b c)
> (cons 'a (cons 'b (cons 'c ())))
(a b c)

7 寻果 cond

(cond (p1 e1) ...(pn en)) 的求值规则如下. 对“条件表达式p”依次求值直到有一个返回t. 如果能找到这样的p表达式,相应的“结果表达式e”的值作为整个cond表达式的返回值.

> (cond ((eq 'a 'b) 'first)  ((atom 'a)  'second))  
 second

函数

当表达式以七个原始操作符中的五个开头时,它总会对其自变量求值的. 我们称这样的操作符为函数 .

通历的天地玄黄程序

一个基本的LISP "天地玄黄"程序:

(show "天地玄黄")

参见

外部链接