これらの条件付実行フォームは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
を戻すのではなくエラーを通知する点が
異なる。