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つのthenとelse書式のみを持つことができる。
そこに多重書式を書きたいときは、prognを使って
グループ化しなければならない。
when test forms [マクロ]
-
-
ifと違って、
whenとunlessは、多重書式で書くことを許可している。
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 ({lab}*) {form}*)}* [マクロ]
-
-
keyとlabelが一致した条件項について、
formが評価され、最後の値が返される。
keyとlabelの間の等価は、eqまたは
memqで行われ、equalではない。
2016-04-05