通常のLisp変数には、有効なLispオブジェクトであればどのような値でも代入できます。ただし、一部のLisp変数はLispではなくCで定義されています。これらの変数の多くは、Cコード内でDEFVAR_LISPを用いて定義されています。Lispで定義された変数と同様に、これらも任意の値を取ることができます。しかし、一部の変数はDEFVAR_INTまたはDEFVAR_BOOLを用いて定義されています。Cによる実装に関する簡潔な解説については、Writing
Emacs Primitives、特にsyms_of_filename型の関数に関する記述を参照してください。
DEFVAR_BOOL型の変数は、nilまたはtのいずれかの値しか取り得ません。それ以外の値を代入しようとすると、tに設定されます:
(let ((display-hourglass 5))
display-hourglass)
⇒ t
この変数には、DEFVAR_BOOL型のすべての変数のリストが格納されています。
DEFVAR_INT型の変数には、整数値しか代入できません。それ以外の値を代入しようとすると、エラーが発生します:
(setq undo-limit 1000.0) error→ Wrong type argument: integerp, 1000.0