The usual way to change the value of a variable is with the special
setq. When you need to compute the choice of variable at
run time, use the function
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 form.
(setq x (1+ 2)) ⇒ 3
xnow has a global value. ⇒ 3
(let ((x 5)) (setq x 6) ; The local binding of
xis set. x) ⇒ 6
x ; The global value is unchanged. ⇒ 3
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
xis set before y (1+ x)) ; the value of
yis computed. ⇒ 11
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 value.
When dynamic variable binding is in effect (the default),
has the same effect as
setq, apart from the fact that
set evaluates its symbol argument whereas
does not. But when a variable is lexically bound,
its dynamic value, whereas
setq affects its current
(lexical) value. See Scoping Rules for Variable Bindings.
(set one 1) error→ Symbol's value as variable is void: one
(set 'one 1) ⇒ 1
(set 'two 'one) ⇒ one
(set two 2) ;
twoevaluates to symbol
one. ⇒ 2
one ; So it is
onethat was set. ⇒ 2 (let ((one 1)) ; This binding of
oneis set, (set 'one 3) ; not the global value. one) ⇒ 3
one ⇒ 2
If symbol is not actually a symbol, a
error is signaled.
(set '(x y) 'z) error→ Wrong type argument: symbolp, (x y)