% Macro PSETQ
Macro PSETQ
psetq
{
pair}
* => nil
*pair* ::= var form
psetq
: [;pee’set,kyoo]
var - 定数ではない変数名のシンボル
form - フォーム
変数に値を代入します。
ちょうどsetq
と似ていますが、代入を「並列」に行うところが違っています。
つまり、最初にすべてのformが評価され、
そのあと初めて変数に返却値がセットされます。
この方法では、ある変数への代入によって、
setq
による順次代入のときのような
計算値への影響が生じるということはありません。
もし、どのvarでもsymbol-macrolet
によって
作られた束縛を参照したときは、
そのvarはpsetq
ではなくpsetf
として扱われます。
;; 変数へ値を代入する単純なPSETQの使用。
;; スタイルについて、このような単純な状況においては
;; 並列の代入は必要ないため、多くのプログラマーにとっては
;; SETQの方が好まれます。しかしどちらも同等の効果を持ちます。
(psetq a 1 b 2 c 3) => NIL
a => 1
b => 2
c => 3
;; 値を順次代入して更新するPSETQの使用。
;; この効果は、SETQ使用のときと全く異なります。
(psetq a (1+ b) b (1+ a) c (+ a b)) => NIL
a => 3
b => 2
c => 3
;; シンボルマクロ上でのPSETQの使用。
(let ((x (list 10 20 30)))
(symbol-macrolet ((y (car x)) (z (cadr x)))
(psetq y (1+ z) z (1+ y))
(list x y z)))
=> ((21 11 30) 21 11)
;; 並列代入の使用による値AとBの交換。
(let ((a 1) (b 2))
(psetq a b b a)
(values a b))
=> 2, 1
各formの値が対応するvarに代入されます。
なし。
なし。
なし。