Chinaunix首页 | 论坛 | 博客
  • 博客访问: 83095
  • 博文数量: 28
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 13:54
文章分类

全部博文(28)

文章存档

2011年(1)

2010年(8)

2009年(19)

我的朋友

分类:

2009-11-10 09:46:03

基本介绍

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 个公理(基本操作符):

基本操作符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))
()

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

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

Common LISP的Hello World程序

下面是一个在标准输出设备上输出的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:

(format t "Hello, world!~%")
阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~