npt-japanese

% Macro PSETQ

UP


Macro PSETQ

Macro PSETQ

構文

psetq {pair}* => nil

*pair* ::= var form 

発音

psetq: [;pee’set,kyoo]

引数と戻り値

var - 定数ではない変数名のシンボル
form - フォーム

定義

変数に値を代入します。

ちょうどsetqと似ていますが、代入を「並列」に行うところが違っています。 つまり、最初にすべてのformが評価され、 そのあと初めて変数に返却値がセットされます。 この方法では、ある変数への代入によって、 setqによる順次代入のときのような 計算値への影響が生じるということはありません。

もし、どのvarでもsymbol-macroletによって 作られた束縛を参照したときは、 そのvarpsetqではなく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に代入されます。

影響

なし。

例外

なし。

参考

psetf, setq

備考

なし。


TOP, Github