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
(=> 1
a => 2
b => 3
c
;; 値を順次代入して更新するSETQの使用
setq a (1+ b) b (1+ a) c (+ a b)) => 7
(=> 3
a => 4
b => 7
c
;; シンボルマクロ上の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に代入されます。
なし。
なし。
なし。