The usual way to change the value of a variable is with the special form
setq. When you need to compute the choice of variable at run time, use the function
special form setq [symbol form]…
This special form is the most common method of changing a variable’s value. Each
symbol is given a new value, which is the result of evaluating the corresponding
form. The current binding of the symbol is changed.
setq does not evaluate
symbol; it sets the symbol that you write. We say that this argument is automatically quoted. The ‘
setq stands for “quoted".
The value of the
setq form is the value of the last
(setq x (1+ 2))
x ; x now has a global value.
(let ((x 5))
(setq x 6) ; The local binding of x is set.
x ; The global value is unchanged.
Note that the first
form is evaluated, then the first
symbol is set, then the second
form is evaluated, then the second
symbol is set, and so on:
(setq x 10 ; Notice that x is set before
y (1+ x)) ; the value of y is computed.
function set symbol value
This function puts
value in the value cell of
symbol. Since it is a function rather than a special form, the expression written for
symbol is evaluated to obtain the symbol to set. The return value is
When dynamic variable binding is in effect (the default),
set has the same effect as
setq, apart from the fact that
set evaluates its
symbol argument whereas
setq does not. But when a variable is lexically bound,
set affects its dynamic value, whereas
setq affects its current (lexical) value. See Variable Scoping.
(set one 1)
error→ Symbol's value as variable is void: one
(set 'one 1)
(set 'two 'one)
(set two 2) ; two evaluates to symbol one.
one ; So it is one that was set.
(let ((one 1)) ; This binding of one is set,
(set 'one 3) ; not the global value.
symbol is not actually a symbol, a
wrong-type-argument error is signaled.
(set '(x y) 'z)
error→ Wrong type argument: symbolp, (x y)