Lisp 入门/第七章 条件操作符
< Lisp 入門
第七章 条件操作符
编辑Cond 操作符
编辑Cond操作符有些复杂。 它的形式为
(cond 分支列表1 分支列表2 分支列表3 ... 分支列表N)
而其中分支列表的构成为 (条件p 值e)
Cond 操作符将对每一个“条件p”求值,如果为NIL,就接著求下一个,如果为真,就返回相应的“值e”,如果没有一个真值,cond操作符返回nil。Cond操作符的参数可以不止两个。
(cond (nil 1) (nil 2) (t 3))
3
(cond (t 1) (nil 2) (t 3))
1
有了cond操作符,我们就相当于拥有了类c语言中的if语句。当然,cond语句比c中的if语句更强大,同时也更难用。在common Lisp中,已经有一个函数if了,它的形式如下 (if 判断表达式 真值时的返回值 假值时的返回值)
两个例子
编辑现在我们将编一个函数,返回两个数中的最大值。
在编写之前,我们要知道,系统已经给我们提供了一个函数,那就是max 。所以我们的函数名字就叫max2,以示区别。
我们依次输入以下代码:
>(defun max2 (a b) (cond ((> a b) a) (t b)))
MAX2
>(max2 2 3)
3
Max2的行为分析:当参数a大于参数b时,返回a,如果不满足此条件,那么就一定要返回b。
所以,我们的条件是a和b的大小比较,如果为真,则返回a,否则,一定返回b。
当然,这个函数,我们也可以用if函数构造。构造如下:
(defun max2 (a b)
(if (> a b) a b)
)
我们还可以定义一个求绝对值的函数。
当然,这个函数系统本身也提供。这个函数的行为如下:
>(abs -3)
3
该如何构造呢,显然,当参数大于0是返回本身,当参数小于0时返回它的相反数。
>(defun abs2 (x) (cond ((> x 0) x) (t (- 0 x))))
ABS2
>(abs2 -3)
3
其中,(- 0 x)表示的意思是 0-x,也就是x的相反数。