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的相反數。