Emacs
Lispでは特定のシンボルは、通常は自分自身に評価されます。これらのシンボルにはnil
とt
、同様に名前が‘:’で始まる任意のシンボル(これらはキーワードと呼ばれる)が含まれます。これらのシンボルはリバインドや、値の変更はできません。nil
やt
へのセットやリバインドは、setting-constant
エラーをシグナルします。これはキーワード(名前が‘:’で始まるシンボル)についても当てはまります。ただしキーワードが標準のobarrayにinternされていれば、そのようなシンボルを自分自身にセットしてもエラーになりません。
nil ≡ 'nil ⇒ nil
(setq nil 500) error→ Attempt to set constant symbol: nil
この関数はobjectが‘:’で始まる名前のシンボルであり、標準のobarrayにinternされていればt
、それ以外はnil
をリターンする。
これらの定数はスペシャルフォームdefconst
(グローバル変数の定義を参照)を使用して定義された定数(constant)とは根本的に異なります。defconst
フォームは、人間の読み手に値の変更を意図しない変数であることを知らせる役目は果たしますが、実際にそれを変更してもEmacsはエラーを起こしません。
現実的な種々の理由により、追加で少数のシンボルが読み取り専用になります。これらにはenable-multibyte-characters
、most-positive-fixnum
、most-negative-fixnum
の他にいくつかのシンボルが含まれます。これらにたいしてセットやバインドを試みると、すべてsetting-constant
エラーがシグナルされます。