Shammer's Philosophy

My private adversaria

and と or

Lispの条件判定では、if や cond 以外にも and と or というのがある。

  • それぞれ複数の条件をとる
  • 最後の式は、真判定の場合のみの動作。偽判定時の処理は書けない。


という点は共通。それぞれ、以下のような動作をする。

  • and の動作
    • 条件式すべてが真の場合に true を返す
    • いずれかの条件式が false となった時点で、後続の条件式は評価しない
  • or の動作
    • 条件式いずれかが真の場合に true を返す
    • いずれかの条件式が true となった時点で、後続の条件式は評価しない


実際に何例か試す。

(and t (+ 1 1))
2
(and t nil (+ 1 1))
NIL
(and t t (+ 1 1))
2
(and t (+ 1 1) (- 1 1))
0

偽判定の場合の動作も書けると便利だと思うのだが・・・これをやる場合は別の方法を考えろということなのか、あるいは書き方が違うのか・・・