% Special-Form SETQ
Special Form SETQ
setq
{
pair}
* => result
*pair* ::= var form
[‘set,kyoo]
var - 定数ではない変数名のシンボル
form - フォーム
result - 最後のformの第一返却値か、pairがないときはnil
。
変数に値を代入します。
(setq var1 form1 var2 form2 ...)
がLispの単純な変数への代入構文です。
最初にform1が評価されて結果を変数var1に保存し、
そのあとform2が評価されて結果を変数var2に保存し、くり返します。
setq
は、レキシカル変数と動的変数の両方の代入に使われます。
もし、どのvarでもsymbol-macrolet
によって
作られた束縛を参照したときは、
そのvarはsetq
ではなくsetf
として扱われます。
;; 変数へ値を代入する単純なSETQの使用
(setq a 1 b 2 c 3) => 3
a => 1
b => 2
c => 3
;; 値を順次代入して更新するSETQの使用
(setq a (1+ b) b (1+ a) c (+ a b)) => 7
a => 3
b => 4
c => 7
;; シンボルマクロ上のSETQの使用例
(let ((x (list 10 20 30)))
(symbol-macrolet ((y (car x)) (z (cadr x)))
(setq y (1+ z) z (1+ y))
(list x y z)))
=> ((21 22 30) 21 22)
各formの第一返却値が対応するvarに代入されます。
なし。
なし。
なし。