まずは、if 式から。if 式は、
(if 条件式 真の時の式 偽の時の式)
の様に記述されます。条件節が true であるか false であるかによって、
式の値が決まるわけです。当然、false 節に if 式 が入っていても構いません。
実行例は以下の通り。
> (if (and #t #t) 1 2) 1 > (if #t 1 2) 1 > (if (< 2 1) 1 2) 2評価順序は、まず、条件式を評価し、その後、真偽にしたがって真/偽時の式の評価に 進みます。
次は、 cond 式です。以下のような形をしています。
(cond (条件式1 式が複数)
(条件式2 式が複数)
.....
(条件式n 式が複数))
条件文を上から順々に評価し、真の値になった時点で同じ節に書かれた続きの式を評価していきます。
式が複数ある場合、最後の式の値のみを返し、cond 式の値とします。
最後の節では、条件式の代りに else と書くことが出来ます。
この場合、 #t と書かれたときと同じ効果を果たします。
> (define (foo2 x) (cond ((= x 0) 0) ; foo2 は x が 0の時は0を返し ((< x 0) (- x 1)) ; 負のときは 1 小さな値を (#t (+ x 1)))) ; それ以外(正のとき)は 1 大きい値を返す > (foo2 4) 5 > (cond ((= 3 4) 1) ((= 2 4) 3)) ; 対応する節(clause) が無い場合 error になる no matching cond clause他に条件分岐式として、 case 式(C言語の switch 文に似たもの)もあります。
その他、詳しくはこちら。
99.9.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp