Go to the first, previous, next, last section, table of contents.

条件

Special Form: if condition then-form else-forms*

この特殊フォームは、最初に condition を評価し、これが nil でない値を返す場 合、(if は) then-form を評価し、値を返します。

condition が nil に評価された場合、(then-form の代りに) else-forms を評価 し、その最後の値を返します。 else-forms が存在しない場合、if は nil を返し ます。

以下に示した例において、選択されなかったフォームは評価されない点に注意する ことが必要です。 (このため) 2 番目の例では true は(関数 print で) print さ れ、フォームの値として返されますが、 false は print されません。

  (if t 'true 'false)
  => true
  (if t (print 'true) (print 'false))
  -> true
  =>true
  (if t 'true)
  => true
  (if nil 'true)
  => nil
  (if nil (print 'true) (print 'false) 'very-false)
  -> false
  => very-false

Special Form: cond clauses*

この特殊フォームは、最初に clauses 中の各 clause の car を(与えられた順に) non-nil が返されるまで評価します。 (訳注:non-nil を返した) clause が (condition body) の形である場合、cond はこの body を implied progn として 評価し、その結果を返します。この clause が (condition) の形である場合、 (この condition の値が non-nil の場合) その値を返します。

成功する clause が存在しない場合、 cond フォームは "通り抜け(訳注:falls through)"、 nil を返します。 (意図しない) 通り抜けを防ぐため、(t something ) を最後の clause として持つようにして下さい。

以下の例では、最初の clause が選ばれることはなく、式 (print 1) は評価され ません。

  (cond (nil (print 1))
        (t 2)
        (t 3))
  => 2
  (cond (nil (print 1))
        (nil 2)
        (t 4 'two))
  => 'two
  (cond (nil (print 1))
        (nil 2)
        (nil)
        (3))
  => 3
  (cond (nil (print 1))
        (nil 2))
  => nil

cond と if は(相互に)変換することができます。どちらを用いるかは、(全く)好 みやスタイルの問題です。例えば、

  (if a b c)
  ==
  (cond ( a b) (t c))

Function: not object

この関数は、 object が nil の場合 t を返します。それ以外の値の場合 nil を 返します。 not は null と同じではありません。

Special Form: and forms*

この特殊フォームは、1つ以上のアーギュメントを受け取り、それらを 1度に 1つ ずつ評価します。それらが(全て) non-nil の値に評価された場合、最後のフォー ムの値を返します。あるアーギュメントが nil に評価された場合 and は (残りの アーギュメントを評価せずに) nil を返します。

  (and (print 1) (print 2) (print 3))
  -> 1
  -> 2
  -> 3
  => 3
  (and (print 1) nil (print 2) (print 3))
  -> 1
  => nil

and は、if や cond で書くことができます。例えば、

  (and arg1 arg2 arg3)
  ==
  (if arg1 (if arg2 arg3))

Special Form: or forms*

この特殊フォームは、1つ以上のアーギュメントを受け取り、それらを 1度に 1つ ずつ評価します。それらが全て nil に評価された場合、or は nil を返します。 あるアーギュメントが non-nil の値に評価された場合、or は (残りのアーギュメ ントを評価せずに) その値を返します。

  (or nil (eq 1 2) (progn (print 'x) nil))
  -> x
  => nil
  (or 1 (eq 1 2) (progn (print 'x) nil))
  => 1

or も、(and 同様) cond や if で書くことができます。

  (or arg1 arg2 arg3)
  ==
  (cond (arg1)
        (arg2)
        (arg3))


Go to the first, previous, next, last section, table of contents.