12.2 Variables that Never Change
In Emacs Lisp, certain symbols normally evaluate to themselves. These include nil and t, as well as any symbol whose name starts with β:β (these are called keywords). These symbols cannot be rebound, nor can their values be changed. Any attempt to set or bind nil or t signals a setting-constant error. The same is true for a keyword (a symbol whose name starts with β:β), if it is interned in the standard obarray, except that setting such a symbol to itself is not an error.
nil β‘ 'nil
β nil
(setq nil 500)
errorβ Attempt to set constant symbol: nil
function keywordp objectβ
function returns t if object is a symbol whose name starts with β:β, interned in the standard obarray, and returns nil otherwise.
These constants are fundamentally different from the constants defined using the defconst special form (see Defining Variables). A defconst form serves to inform human readers that you do not intend to change the value of a variable, but Emacs does not raise an error if you actually change it.
A small number of additional symbols are made read-only for various practical reasons. These include enable-multibyte-characters, most-positive-fixnum, most-negative-fixnum, and a few others. Any attempt to set or bind these also signals a setting-constant error.