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
(=> 2
(select-options) => 2
a => 3
(select-options) => 3
a => 1
(select-options) setq a 5) => 5
(=> 1, 2 (select-options)
なし。
なし。
なし。
なし。