Emacs Lispでは、特定のシンボルは通常、それ自体を評価します。これには nil や
t のほか、名前が ‘:’ で始まるあらゆるシンボルが含まれます(これらは キーワード と呼ばれます)。これらのシンボルは再バインドできず、その値を変更することもできません。nil や t
を設定またはバインドしようとすると、setting-constant
エラーが発生します。キーワード(名前が ‘:’
で始まるシンボル)についても標準の obarray
にインターニングされていれば同様ですが、そのようなシンボルをそれ自体に設定してもエラーにはなりません。
nil ≡ 'nil
⇒ nil
(setq nil 500) error→ Attempt to set constant symbol: nil
object が名前の先頭に ‘:’ を持つシンボルであり、標準 obarray にインターニングされている場合は t を、それ以外の場合は nil を返します。
これらの定数は、defconst 特殊形式を用いて定義される定数とは根本的に異なります(グローバル変数の定義を参照)。defconst
形式は、変数の値を変更する意図がないことを人間の読者に知らせるためのものですが、実際に値を変更しても Emacs はエラーを発生させません。
さまざまな実用上の理由から、少数の追加シンボルが読み取り専用となっています。これには enable-multibyte-characters、most-positive-fixnum、most-negative-fixnum
などが含まれます。これらを設定またはバインドしようとする試みも、setting-constant
エラーとなります。