nil
とt
Lispでは、シンボルnil
には3つの異なる意味があります。
まず、nil
という名前のシンボルです。
2つめは、真理値の偽(false)です。
3つめは、空リスト、つまり、要素数が0個のリストです。
変数として使った場合、nil
の値はつねにnil
です。
Lispリーダにとっては、‘()’と‘nil’は同一です。
どちらも、同じオブジェクト、シンボルnil
を表します。
シンボルを異なった書き方にするのは、完全に人間向けです。
‘()’や‘nil’をLispリーダが読み取ったあとでは、
プログラマが実際にどちらの表記を用いたかわかりません。
本書では、空リストを強調するときには()
を使い、
真理値の偽を強調するときにはnil
を使います。
これは、Lispプログラムでも使うとよい慣習です。
(cons 'foo ()) ; 空リストであることを強調する (not nil) ; 真理値の偽であることを強調する
真理値の真を必要とする場面では、
nil
以外の値は、真(true)であるとみなします。
しかし、真を表す望ましい書き方はt
です。
真を表す値が必要なとき、
適当な判断基準がない場合にはt
を使います。
シンボルt
の値はつねにt
です。
Emacs Lispでは、nil
とt
は特別なシンボルであり、
評価するとそれ自身になります。
そのため、これらをプログラム内で定数として使うとき、
これらをクォートする必要はありません。
これらの値を変更しようとすると、エラーsetting-constant
になります。
コロン(‘:’)で始まる名前のシンボルも同様です。
See Constant Variables。