Next: , Up: if   [Contents][Index]


if in more detail

Lispにおいて記述されるif式では“then”という単語を使いません。1つ目の要素がifであるようなリストの2つ目の要素がテスト、3つ目の要素がアクションになります。そうであるにも関わらず、if式でテストを行う部分のことをif-part、2つ目の引数をthen-partと呼ぶことが多々あります。

更にif式を記述する際には、通常はシンボルifと同じ行にtrue-or-false-testを記述しますが、テストが真(true)のとき実行するthen-partは2行目以降に記述します。これはif式を読み易くするためです。

(if true-or-false-test
    action-to-carry-out-if-test-is-true)

true-or-false-testはLispインタープリターによって評価される式になります。

以下の例は通常の方法で評価できます。数値の5は数値の4より大きいかどうかがテストです。このテストは正しいのでメッセージ‘5 is greater than 4!’が表示されるでしょう。

(if (> 5 4)                             ; if-part
    (message "5 is greater than 4!"))   ; then-part

(>は1つ目の引数が2つ目の引数より大きいかどうかをテストして、大きければtrueをリターンする関数です。)

もちろん実際の使用においては式(> 5 4)のように常に答えが定まったテストをif式に記述することはないでしょう。かわりにテストで用いる変数のうち少なくとも1つは、事前に値が判らない変数にバインドされるはずです(事前に値が判っていればテストを行う必要はないでしょうから!)

たとえば関数定義の引数に値がバインドされるかもしれません。以下の関数定義では、動物キャラクターが関数に渡された値です。characteristicにバインドされたのが"fierce"ならメッセージ‘It is a tiger!’がプリントされて、それ以外の場合にはnilがリターンされます。

(defun type-of-animal (characteristic)
  "Print message in echo area depending on CHARACTERISTIC.
If the CHARACTERISTIC is the string \"fierce\",
then warn of a tiger."
  (if (equal characteristic "fierce")
      (message "It is a tiger!")))

これをGNU Emacsで読んでいるなら、Emacsにインストールするために通常の方法で関数定義を評価してから、以下の2つの式を評価して結果を目にすることができます:

(type-of-animal "fierce")

(type-of-animal "striped")

(type-of-animal "fierce")を評価すると"It is a tiger!"というメッセージがエコーエリアにプリントされることを確認できるでしょう。(type-of-animal "striped")を評価した場合にはエコーエリアにnilがプリントされるはずです。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.