2008年6月8日日曜日

計算機プログラムの構造と解釈 1.1.6


このエントリーをはてなブックマークに追加


1.1.6 keyword
条件式、述語

~条件式~
Lispには場合分け(case analysis)を記述する特殊形式cond(conditional),if,elseがある。

condの一般式は

(cond (<p1> <e1>)
(<p2> <e2>)
(<p3> <e3>))



となり、pには条件式がはいり、<p1>が真ならば<e1>の値を取り、偽なら<p2>を評価し、以下繰り返し。

絶対値absを定義する式は以下の様になる。

(define (abs x)
(cond ((> x 0) x)
((= x 0) 0)
((< x 0) (- x)))


条件が全て偽なら定義は行われない。
またマイナス記号は単項で用いた場合(- x)、符号反転の役目を果たす。

elseとif式はC言語でお馴染み。説明はいらないと思われる。

(define (abs x)
(cond ((< x 0) (- x)
(else x)))



(define (abs x)
(if (< x 0)
(- x)
x))



and,or,notも同様。
ただし、notは特殊形式ではないことに注意。
なぜならand,orは必ずしも全ての式を評価しないが、notは(not (< x y))のように必ず式を評価するから。


~述語(predicate)~
真と偽に評価される式、または真か偽を返す手続きのことを指す。
上記の<p1>,<p2>,...や、<,>,=などの基本的手続きも述語である。

また<e1>,<e2>,...を帰結式と呼ぶ。




0 件のコメント:

コメントを投稿