[Prev]    [ Up ]    [Next]

条件式

真偽値を返すような式を評価し,その結果次第で異なる式が実行されるような式 を条件式という.条件の真偽を判定するための式を 述語(predicate)という.一般に条件式においては,#f以外は全て真 と扱われる.ここでは,Schemeで使われる代表的な条件式を挙げる.

if

	  ;; 差の絶対値を返す関数
	> (define (asub x y) (if (< x y) (- y x) (- x y)))
	asub
	> (asub 1 2)
	1
	> (asub -6 -10)
	4	  
条件式ifの構造は,以下の通り.
	(if <条件> <条件が真のときに実行される式> <条件が偽のときに実行される式>)
まず<条件>が評価される.残りの式は,それぞれ条件が真あるいは偽のときのみ実行される.つまり条件に当てはまらない方の式は評価されない.
	;; 次のifは,必ず"*"を返す
	> ((if #f no-such-function *) 3 4)
	;; (* 3 4)
	12
上でも述べたように,一般に条件式においては#f以外は全て真と扱われる.
	> (if 3 0 1)
	0
	> (if #f 0 1)
	1
	;; 0も#fではないので,真.
	> (if 0 0 1)
	0

cond

	> (define (compare x y) 
		(cond ((< x y) 'smaller)
		      ((> x y) x 'is 'larger)
		      (#t 'equal)))
	compare
	> (compare 1 2)
	smaller
	> (compare 1 1)
	equal
条件式condの構造は,以下の通り.
	(cond (<条件1> <式11> <式12>...)
	      (<条件2> <式21> <式22>...)
		:
	      (#t <式n1> <式n2>...))
<条件1>,<条件2>...を順番に評価していって,真になる<条件i>を見つけたときに,対応する<式i1>,<式i2>...を順に評価し,最後の式の値を返す.

and

	> (and #f #t)
	#f
	> (and (= 1 1) (< 1 2))
	#t
	> (and (< 0 1) (= 3 3) (> 1 2))
	#f
条件式andの構造は,以下の通り.
	(and <式1> <式2>...)
<式>を順に評価していって,偽になるものがあれば#fを返す. このとき残りの式は評価されないので,論理積とは異なり,式の順序が重要になる. 全て偽でなかった場合は,最後に評価した式の値を返す.引数が無い場合には,#tを返す.
	> (and 0 1 #t 'x '(a b c))
	(a b c)
	> (and)
	#t

or

	> (or #f #t)
	#t
	> (or (= 1 1) (< 1 2))
	#t
	> (or (< 0 1) (= 3 3) (> 1 2))
	#t
	;; notは,引数が#fなら#t,それ以外なら#fを返す.
	> (or (not (= 1 1)) (eq? 'a 'b))
	#f	
条件式orの構造は,andと同様で以下の通り.
	(or <式1> <式2>...)
<式>を順に評価していって,真になるものがあればその値を返す. このときやはり残りの式は評価されない. 全て真でなかった場合は,#fを返す.引数が無い場合にも,#fを返す.
	> (or 0 1 #t 'x '(a b c))
	0
	> (or)
	#f


[Prev]    [ Up ]    [Next]