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
(=> 1
a => 2
b => 3
c
;; 値を順次代入して更新するPSETQの使用。
;; この効果は、SETQ使用のときと全く異なります。
psetq a (1+ b) b (1+ a) c (+ a b)) => NIL
(=> 3
a => 2
b => 3
c
;; シンボルマクロ上での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に代入されます。
なし。
なし。
なし。