nil ¶ の解説真理性の検定を例示する前に、nilについての説明が必要である。
Emacs Lispにおいて、シンボル nil
には2つの意味があります。1つ目は空リストを意味します。2つ目は false を意味し、真偽判定テストが false
となった際に返される値です。nil は、空リスト、()、あるいは nil
として記述できます。Lispインタプリタの観点からは、() と nil は同じものです。しかし、人間は false に nil を、空リストに () を用いる傾向があります。
Emacs Lispでは、nil(空リストではない)あらゆる値は真とみなされます。つまり、評価の結果が空リストではない値となった場合、if
式は真と判定されます。例えば、テスト用のスロットに数値が格納されている場合、その数値は評価され、数値が評価された際の挙動に従って自身を返します。この条件式において、if 式は真と判定されます。この式が偽と判定されるのは、式の評価によって空リストである nil が返された場合のみです。
次の例で2つの式を評価すれば、それが分かります。
最初の例では、if 式のテストとして数値 4 が評価され、自身を返します。その結果、式の then
部分が評価されて返され、エコー領域に ‘true’
が表示されます。2番目の例では、nil は偽を示します。その結果、式の else
部分が評価されて返され、エコー領域に ‘false’ が表示されます。
(if 4
'true
'false)
(if nil
'true
'false)
ちなみに、真を返すテストに対して他に有用な値が用意されていない場合、Lispインタプリタは真を表すシンボル t を返します。例えば、式 (> 5 4)
は、通常の方法で評価すればわかるように、評価時に t を返します:
(> 5 4)
一方、この関数はテストが偽の場合に nil を返します。
(> 4 5)