nil
とt
Emacs
Lispでは、シンボルnil
には3つの異なる意味があります。1つ目は‘nil’という名前のシンボル、2つ目は論理値のfalse、3つ目は空リスト
— つまり要素が0のリストです。変数として使用した場合、nil
は常に値nil
をもちます。
Lispリーダーに関する限り、‘()’と‘nil’は同一です。これらは同じオブジェクト、つまりシンボルnil
を意味します。このシンボルを異なる方法で記述するのは、完全に人間の読み手を意図したものです。Lispリーダーが‘()’か‘nil’のどちらかを読み取った後は、プログラマーが実際にどちらの表現で記述したかを判断する方法はありません。
このマニュアルでは、空リストを意味することを強調したいときは()
と記述し、論理値のfalseを意味することを強調したいときはnil
と記述します。この慣習はLispプログラムで使用してもよいでしょう。
(cons 'foo ()) ; 空リストを強調 (setq foo-flag nil) ; 論理値のfalseを強調
論理値が期待されているコンテキストでは、非nil
はtrueと判断されます。しかし論理値のtrueを表す好ましい方法はt
です。trueを表す値を選択する必要があり、他に選択の根拠がない場合はt
を使用してください。シンボルt
は、常に値t
をもちます。
Emacs
Lispでのnil
とt
は、常に自分自身を評価する特別なシンボルです。そのためプログラムでこれらを定数として使用する場合、クォートする必要はありません。これらの値の変更を試みると、結果はsetting-constant
エラーとなります。変更不可な変数を参照してください。
objectが2つの正規のブーリーン値(t
かnil
)のいずれかなら、非nil
をリターンする。