if 特別式


条件による分岐処理

前回の値の比較を行う関数を使えば、特定の値が指定した条件を満たしているかどうかを真偽値 t または nil から知ることができました。 これを利用することによって、特定の条件化でプログラムの処理を分岐させると言うことができるようになります。

真偽を表すリテラル t または nil によって評価対象の関数を分岐させるには if 特別式を使います。 if 特別式は最初の引数に渡された条件が nil でなければ第二引数を、そうでなければ第三引数を実行するというシンプルな分岐処理を行います。

if test then [else]

まず、if 関数は test を評価します。 その結果が nil 以外であれば直後の then を評価し、else は評価されません。 test の結果が nil であれば、then を評価せずに else を評価します。 else は省略可能なので、省略されている場合は何も評価せずに終了します。 式が何も評価されなかった場合、if 関数の結果は nil となります。

> (if t 10 100)
10
> (if 1 10 100)
10
> (if nil 10 100)
100
> (if nil 10)
NIL

この結果を見れば、if 特別式の基本的な動作を確認することができます。 if の第一引数に nil 以外の任意の値を与えた場合、if は第二引数を実行しています。 そうではない場合、第三引数が存在していればそれを評価し、第三引数が省略されている場合は何も評価せずに nil を返しています。 つまり、第三引数が省略された if 特別式とは (if test then nil) と同義なのです。

この if 特別式の条件に値の比較を行う = や <、> などの関数の結果を与えれば、変数が指定した条件の値を持っている場合にのみ実行する関数などを指定することができるようになります。

> (setq x 10)
10
> (if (< x 100) (setq y 100) (setq y x))
100
> (if (= y 100) (setq x y) (setq x 0))
100
> x
100
> y
100

このように、変数 x が 100 より低ければ〜する、そうでなければ〜する、という処理が if によって実現できます。



前のページへ戻る次のページへ