% Macro COND
Macro COND
cond {
clause}
* => result*
clause ::= (test-form form*)
test-form - フォーム
form - 暗黙のprogn
result - test-formがtrueを返却した最初のclauseにあるformの値か、
formがないclauseのtest-formの第一返却値か、
あるいはtest-formがtrueを返却しなかったときはnil
。
cond
はtest-formに依存したformの実行を行います。
test-formは、それがtrueと評価されるものが見つかるまで、 引数のリストを順番に一度だけ評価されます。
もしclauseにformがないとき、test-formの第一返却値が
cond
フォームの返却値になります。
そうでなければ、test-formに関連付けられたformが
左から右の順番に暗黙のprognとして評価され、
最後のformの返却値がcond
フォームの返却値になります。
いったんtest-formがtrueを返却したら、
他のtest-formは評価されません。
もしどのtest-formもtrueを返却しないときは、
nil
が返却されます。
(defun select-options ()
(cond ((= a 1) (setq a 2))
((= a 2) (setq a 3))
((and (= a 3) (floor a 2)))
(t (floor a 3)))) => SELECT-OPTIONS
(setq a 1) => 1
(select-options) => 2
a => 2
(select-options) => 3
a => 3
(select-options) => 1
(setq a 5) => 5
(select-options) => 1, 2
なし。
なし。
なし。
なし。