Common Lisp入门笔记(一)7个基本运算符

摘自 《Lisp语言- 陈光喜》

表达式实例:

>(+ 1 2)

>3

Common Lisp表达式求值规则是:

首先对每个参数从左到右进行求值;

其次将这些已经求值的参数作为运算符函数的参数进行函数调用求值;

所求得的值作为表达式的值返回。

一、Lisp的数据类型

Lisp有其它语言的一切类型,还提供另外其它语言没有两种类型: symbol(符号)和 list(表)。

(1)符号显示时总是被转换为大写。一般要使用 quote 来引用它

>’qwert 
QWERT 


(2)列表

List(表)是由一对括号包括起来的,括号内有 0 个或多个元素,这些元素可以是任何类型的,也可以是表。要使用 quote 来引用 list,否则它将被 Lisp 求值。
> '(1 2 (a b 3) d) 
 (1 2 (a b 3) d) 
也可以使用 list 来建立表:
> (list 'a 'b "sin"   1 2) 
(A B "sin" 1 2) 
>(list '(* 2 3) (* 2 3)) 
((* 2 3) 6) 


二、Lisp的7个基本运算符

Lisp的表达式是一个原子(atom)或表(list),原子是一个字母序列,如ab;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中。

(1) quote

quote是一个特殊的运算符,可以简写为" ‘ “ ,它的求值规则是什么也不做。通过引用一个表,可以避免它被求值。

>   (quote x) 

> (quote (a b c)) 
(A B C) 
> 'x 

> '(a b c) 
(A B C) 


(2) atom

(atom x)返回原子t (或T),如果x的值是一个原子或是空表,否则返回 ()。在Lisp中,() 即空表可表示为()或nil。

>(atom ())

>T


(3)eq

(eq x y) 如果x 和 y 的值是同一个原子或都是空表返回 T , 否则返回空表 () 。

>(eq 'a 'a)

>T

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

>NIL

注意(eq '(a b) '(a b)) 会返回NIL , 因为 '(a b) 不是原子


(4)car 和 cdr

(car x)要求参数 x 的值是一个表,它返回 x 的第一个元素。

(cdr x)  要求参数 x 的值是一个表,返回 x 的第一个元素之后的所有元素。

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


(5)cons

(cons x y)要求 y 是一个表,它返回一个表,表的第一个元素是 x,其后是 y 中的所有元素。例如:
> (cons '1 '(2 3)) 
(1 2 3) 
> (cons '(a b) '(1 2 3)) 
((A B) 1 2 3) 

(6)cond

在 Lisp 中分支条件可由 cond 操作符完成的。Cond 的形式如下: 
(cond (p1 e1) (p2 e2)...(pn  en)) 

p1 到 pn 为条件,e1 到 en 为结果,cond 操作符依次对 p1 到 pn 求值,直到找到第一个值为原子 t(真)的p,此时把对应的表达式 e 的值作为整个表达式的值返回。

如:

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

>SECOND

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值