これらの条件付実行フォームはEmacs Lispの単純なif、and、
or、そしてcondフォームを増加させる。
これは“else”フォームがなく、ことによるといくつかの“then”フォームが
あるifの別の形である。特に、
(when test a b c)
は完全に下記と同等である。
(if test (progn a b c) nil)
これは“then”フォームがなく、ことによるといくつかの“else”フォームが
あるifの別の形である:
(unless test a b c)
は完全に下記と同等である。
(when (not test) a b c)
このマクロはkeyformを評価し、それからさまざまなclauseの
中にリストされたのキーの値と比較する。キーにマッチする節はどれでも
実行される; 比較はeqlによってなされる。どの節もマッチしない
場合、caseフォームはnilを戻す。節は下記の
フォームである。
(keylist body-forms…)
ここでkeylistはキーの値のリストである。正確に1個の値がある場合、
かつコンスセルやシンボルnilまたはtではない場合、リスト
内に囲まずにそれ自身をkeylistとして使うことができる。case
フォーム内のすべてのキーの値は別でなくてはならない。最後の節は他の節が
マッチしない場合にとられる既定節を示すためにkeylistの場所に
tを使ってもよい。(シンボルotherwiseもtの場所に
認められる。実際のシンボルt、nil、またはotherwise
とマッチする節を作るためには、リストの中にシンボルを囲むこと。)
たとえば、この式はキーストロークを読み、それが‘a’、‘b’、 RETまたはC-j、またはそれ以外のどれであるかによって4個の 事の内の1個を行なう。
(case (read-char) (?a (do-a-thing)) (?b (do-b-thing)) ((?\r ?\n) (do-ret-thing)) (t (do-other-thing)))
このマクロはちょうどcaseに似ているが、キーが節のどれにも
マッチしない場合は単にnilを戻すのではなくエラーを通知する点が
異なる。
このマクロは値ではなく型をチェックするcaseの版である。
各clauseはフォーム‘(type body...)’である。
型指定子の記述はSee データ型の述語. たとえば、
(typecase x (integer (munch-integer x)) (float (munch-float x)) (string (munch-integer (string-to-int x))) (t (munch-anything x)))
型指定子tはオブジェクトのすべての型にマッチする; 語
otherwiseも許される。いくつかの型のどれかにマッチする1個の節を
作るには、(or ...)型指定子を使うこと。
このマクロはちょうどtypecaseに似ているが、キーが節のどれにも
マッチしない場合は単にnilを戻すのではなくエラーを通知する点が
異なる。