lispのif文の使い方
Lispのif文は以下のように使われます。
(if 条件 式1 式2)
この式は、条件が真である場合は式1を評価し、条件が偽である場合は式2を評価します。 例えば、以下のようなLispのif文があります。
(if (> x 0) (print "x is positive"))
この場合、xが0より大きい場合にのみ、"x is positive"が出力されます。
lispのif文の特殊性
Lispのif文は特殊形式であり、条件の評価結果に応じて評価する式を決定するため、他のプログラム言語でよく見られる条件演算子とは異なります。したがって、注意する必要があります。
注意点として、Lispのif文は必ずしも2つの式を評価する必要はなく、条件が真である場合に評価される式は1つだけであっても構いません。また、条件が偽である場合の式が省略された場合、if式全体はnil
を返します。
例えば、次のようなコードはエラーにはなりません。
(if (odpdp 5) `odd-number (/ 1 0))
lispのprognの使い方
progn
は、複数の式を一つの式として評価するために使用されます。progn
は以下のように使用されます。
(progn 式1 式2 ... 式n)
この式は、式1から式nまでのすべての式を評価し、最後の式の値を返します。progn
はLispの特殊形式の一つであり、プログラムの制御構造を変更するための様々な手段を提供します。
progn
の注意点として、すべての式が評価されるため、最後の式が返す値が最終結果となります。また、progn
内の式を括弧で囲む必要はありませんが、視認性のために括弧で囲むことが一般的です。
例えば、以下のようなLispのprogn
があります。
(progn (print "Hello,") (print "world!"))
この場合、"Hello,"と"world!"が順番に出力され、最後の式(print "world!")
が返す値(nil
)が最終結果となります。
whenとunlessとcond
Lispには、if文とは別に、より簡潔に条件分岐を表現するための特殊形式がいくつかあります。そのうち、when、unless、condについて説明します。
when
when
は、条件が真の場合に式を評価する特殊形式です。以下のように使います。
(when 条件 式1 [式2 ...])
条件
が真の場合、式1
から式n
までの式を評価します。式1
から式n
までの式は、複数指定できます。when
は、if
文と似た動作をしますが、条件が偽である場合は何も評価しません。when
式自体は、評価した最後の式の値を返します。
例えば、以下のようなLispのwhen
があります。
(when (> x 0) (print "x is positive") (print "x is greater than zero"))
この場合、x
が0
より大きい場合に、"x is positive"
と"x is greater than zero"
が順番に出力されます。
unless
unless
は、条件が偽の場合に式を評価する特殊形式です。以下のように使います。
(unless 条件 式1 [式2 ...])
条件
が偽の場合、式1
から式n
までの式を評価します。式1
から式n
までの式は、複数指定できます。unless
は、when
と同様に、if
文と似た動作をしますが、条件が真である場合は何も評価しません。unless
式自体は、評価した最後の式の値を返します。
例えば、以下のようなLispのunless
があります。
(unless (> x 0) (print "x is not positive") (print "x is less than or equal to zero"))
この場合、x
が0
以下の場合に、"x is not positive"
と"x is less than or equal to zero"
が順番に出力されます。
cond
cond
は、複数の条件式に対してそれぞれの場合に式を評価する特殊形式です。以下のように使います。
(cond (条件1 式1 [式2 ...]) (条件2 式1 [式2 ...]) ... (t 式1 [式2 ...]))
cond式は、上から順に各条件式を評価します。条件式は、先頭に評価される式が真である場合に、その条件式の残りの式を評価します。
tという
シンボルは、Lispで真と見なされる特殊なシンボルです。最後の条件として、
tを指定することで、それ以外の全ての条件が偽の場合に、
式1から
式nまでの式を評価します。
式1から
式nまでの式は、複数指定できます。
cond`式自体は、評価した最後の式の値を返します。
例えば、以下のようなLispのcond
があります。
(cond ((= x 0) (print "x is zero")) ((< x 0) (print "x is negative")) ((> x 0) (print "x is positive")) (t (print "x is not a number")))
この場合、x
の値によって、4つの条件式のうち評価される式が決まります。x
が0
の場合は"x is zero"
が、x
が負の数の場合は"x is negative"
が、x
が正の数の場合は"x is positive"
が、それ以外の場合は"x is not a number"
が出力されます。