Обычные переменные Lisp могут быть присвоены любое значение, являющееся допустимым
объектом Lisp. Однако некоторые переменные Lisp не определены в Lisp, а в C.
Большинство этих переменных определены в коде C с использованием
DEFVAR_LISP. Как и переменные, определенные в Lisp, они могут принимать
любое значение. Однако некоторые переменные определены с использованием
DEFVAR_INT или DEFVAR_BOOL. См. Написание примитивов Emacs, в частности описание функций типа syms_of_filename, для краткого обсуждения реализации в C.
Переменные типа DEFVAR_BOOL могут принимать только значения
nil или t. Попытка присвоить им любое другое значение
установит их в t:
(let ((display-hourglass 5))
display-hourglass)
⇒ t
Эта переменная содержит список всех переменных типа DEFVAR_BOOL.
Переменные типа DEFVAR_INT могут принимать только целочисленные значения.
Попытка присвоить им любое другое значение приведет к ошибке:
(setq undo-limit 1000.0) error→ Неверный аргумент типа: integerp, 1000.0