Next: , Previous: , Up: 制御構造   [Contents][Index]


4.4 条件付き実行

これらの条件付実行フォームはEmacs Lispの単純なifandor、そしてcondフォームを増加させる。

Special Form: when test forms…

これは“else”フォームがなく、ことによるといくつかの“then”フォームが あるifの別の形である。特に、

(when test a b c)

は完全に下記と同等である。

(if test (progn a b c) nil)
Special Form: unless test forms…

これは“then”フォームがなく、ことによるといくつかの“else”フォームが あるifの別の形である:

(unless test a b c)

は完全に下記と同等である。

(when (not test) a b c)
Special Form: case keyform clause…

このマクロはkeyformを評価し、それからさまざまなclauseの 中にリストされたのキーの値と比較する。キーにマッチする節はどれでも 実行される; 比較はeqlによってなされる。どの節もマッチしない 場合、caseフォームはnilを戻す。節は下記の フォームである。

(keylist body-forms…)

ここでkeylistはキーの値のリストである。正確に1個の値がある場合、 かつコンスセルやシンボルnilまたはtではない場合、リスト 内に囲まずにそれ自身をkeylistとして使うことができる。case フォーム内のすべてのキーの値は別でなくてはならない。最後の節は他の節が マッチしない場合にとられる既定節を示すためにkeylistの場所に tを使ってもよい。(シンボルotherwisetの場所に 認められる。実際のシンボルtnil、または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)))
Special Form: ecase keyform clause…

このマクロはちょうどcaseに似ているが、キーが節のどれにも マッチしない場合は単にnilを戻すのではなくエラーを通知する点が 異なる。

Special Form: typecase keyform clause…

このマクロは値ではなく型をチェックする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 ...)型指定子を使うこと。

Special Form: etypecase keyform clause…

このマクロはちょうどtypecaseに似ているが、キーが節のどれにも マッチしない場合は単にnilを戻すのではなくエラーを通知する点が 異なる。