Up: Truth & Falsehood [Contents][Index]
nil
真偽に関するテストを説明するには、その前にnil
について説明する必要があります。
Emacs
Lispにおいてシンボルnil
には2つの意味があります。1つ目は空のリスト、2つ目はfalse(偽)の意味であり、これはtrue-or-false-testのテストがfalseの際にリターンされる値です。nil
のことをnil
、あるいは空リスト()
として記述できます。Lispに関するかぎり、()
とnil
は等価です。ただし人間に関してはfalseにはnil
、空リストには()
を使う傾向があります。
Emacs Lispではnil
(空のリスト)ではないすべての値はtrue(真)とみなされます。これはもしある評価において空リスト以外の何かがリターンされると、if
式のテストがtrueになることを意味します。たとえばある数値をテスト用のスロットに置くとその数値が評価されて、数値を評価した際にはその数値自身がリターンされることから、その数値がリターンされることになります。そしてこの条件ではif
式のテストがtrueになるのです。式を評価してリターンされたのがnil
ではなく空リストでないときだけ、式のテストはfalse(偽)となります。
以下の2つの式を評価してこれを確認できます。
1つ目の例ではif
内のテストによって数値の4が評価されて、その数値自身がリターンされます。必然的に式のthen-partが評価されてリターンされた‘true’がエコーエリアに表示されます。2つ目の例において、nil
はfalse(偽)を表すのでその結果、式else-partが評価されてリターンされた‘false’がエコーエリアに表示されます。
(if 4 'true 'false)
(if nil 'true 'false)
ちなみにtrueをリターンするような何らかの有用な値をテスト用に利用できない場合には、Lispインタープリターはtrueを表すシンボルであるt
をリターンします。たとえば式(>
5 4)
を評価するとt
がリターンされます。これは通常の方法で評価すれば確認できます:
(> 5 4)
その反対にテストがfalseならこの関数はnil
をリターンします。
(> 4 5)