next up previous
Next: 15.2 繰り返し文 Up: 15 制御文マクロ Previous: 15 制御文マクロ

15.1 条件式 cond

(cond (条件式 式 .. 結果式)...(条件式   式 ..結果式))
という構文で,条件式が nilでない リストの式を順に評価し最後の式の結果 をcondの値として返すものです.
<cl> (macroexpand '(cond (a b) (c d) (e f)))
(IF A (PROGN B) (COND (C D) (E F)))
ここで,macroexpandした中にさらに condが残っていますが,マクロフォーム の評価は,フォームの先頭がマクロの時にその先頭がマクロでなくなるまで (つまり,フォームがスペシャルフォームか,関数フォームになるまで)展開 を行ない,その後でそのフォームの評価を行なった結果を最初のマクロフォー ムの評価結果として返します.この,フォームの先頭がマクロでなくなるまで 展開した後,そのフォームの評価を行ない,そのフォームの内部にマクロがあっ ても,その内部のものまでを最初に展開してしまわないところがミソです.と いうのは,内部のものまで一度に展開してしまうと,大変大きなリストができ たり,無限リストになったりする場合があるからです.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日