条件文

and,orおよびcondは、Common Lispにおいてマクロとして知られているが、 EusLispではインタプリタ時の効率を改善するために特殊書式として実行される。



and {form}* [特殊]

formは、NILが現れるまで左から右に評価される。 もし、全ての書式がnon-NILとして評価されるならば、 最後の値が返される。


or {form}* [特殊]

formは、non-NIL値が現れるまで左から右に評価される。 そして、その値が返される。 もし、全ての書式がNILとして評価されるならば、NILを返す。


if test then [else] [特殊]

ifは、1つのthenelse書式のみを持つことができる。 そこに多重書式を書きたいときは、prognを使って グループ化しなければならない。


when test forms [マクロ]

ifと違って、 whenunlessは、多重書式で書くことを許可している。 testの評価がnon-NILのとき、whenは実行され、 評価がNILのとき、unlessは実行される。 もう一方で、これらのマクロはelse書式を追加することを 許可していない。


unless test forms [マクロ]

(when (not test) . forms)と同等である。


cond (test {form}*)* [特殊]

任意の数の条件項は、condの後に続けることができる。 それぞれの条件項において、最初の書式testが評価される。 もし、non-NILであったとき、その条件項の残りの書式は、続いて評価される。 そして、最後の値が返される。 もし、testのあとに書式がなかったならば、 testの値が返される。 testが失敗したとき、次の条件項はtestがnon-NIL評価されるかまたは 全ての条件項が尽きてしまうまで繰り返される。 条件項が尽きてしまった場合、condはNILを返す。


case key {({label $ \vert$ ({lab}*) {form}*)}* [マクロ]

keylabelが一致した条件項について、 formが評価され、最後の値が返される。 keylabelの間の等価は、eqまたは memqで行われ、equalではない。




2016-04-05