LISP:修订间差异
Jobinson99(留言 | 贡献) 中文化该程序语言 |
Jobinson99(留言 | 贡献) |
||
第37行: | 第37行: | ||
正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。 |
正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。 |
||
=== |
===历 的 7 个公理(基本操作符):=== |
||
''' |
'''1 quote''' |
||
(quote x) 返回 x,我们简记为 'x |
(quote x) 返回 x,我们简记为 'x |
||
第50行: | 第50行: | ||
</source> |
</source> |
||
''' |
'''2 存否 atom''' |
||
(atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。 |
(atom x) 当 x 是一个原子或者空表时返回原子 t,否则返回空表 ()。在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。 |
||
第71行: | 第71行: | ||
() |
() |
||
</source> |
</source> |
||
引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 |
引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 历 最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用 quote 来区分它们。 |
||
''' |
'''3 同否 eq''' |
||
(eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 () |
(eq x y) 当 x 和y 的值相同或者同为空表时返回t,否则返回空表 () |
||
第85行: | 第85行: | ||
</source> |
</source> |
||
''' |
'''4 取首 car''' |
||
(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如: |
(car x) 要求 x 是一个表,它返回 x 中的第一个元素,例如: |
||
第93行: | 第93行: | ||
</source> |
</source> |
||
''' |
'''5 除首 cdr''' |
||
(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如: |
(cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如: |
||
第101行: | 第101行: | ||
</source> |
</source> |
||
''' |
'''6 合成 cons''' |
||
(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如: |
(cons x y) 要求 y 是一个表,它返回一个表,这个表的第一个元素是 x,其后是 y 中的所有元素,例如: |
||
第111行: | 第111行: | ||
</source> |
</source> |
||
''' |
'''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的版本
![]() | |
编程范型 | 多范型: 函数式, 过程式, 反射式, 元编程 |
---|---|
設計者 | 约翰·麦卡锡 |
實作者 | Steve Russell, Timothy P. Hart和Mike 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 Lisp和Scheme。
基本介绍
历 是第一個函數型程式語言,主要應用在人工智能(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 "天地玄黄")