Special Operator PROGV
progv symbols values form* => result*
symbols シンボルのリスト、評価されます。
values - オブジェクトのリスト、評価されます。
form - 暗黙のprogn
result - formの返却値
progvは、新しい動的変数の束縛を作成し、 それらの束縛を使うformを実行します。 各formは順番に実行されます。
progvは、実行時に名前を決めることができる、 ひとつか複数の動的変数の束縛をします。 各formは、symbols内の名前の動的変数に対応するvaluesを束縛した状態で、 順番に評価されます。 もしvaluesの値が少ないときは、 残りのsymbolsは束縛され、 そのあとで値を持っていない状態にします。 もしvaluesの値が多いときは、余分の値は無視されます。 動的変数の束縛は、progvの終了時に元に戻されます。
(setq *x* 1) => 1
(progv '(*x*) '(2) *x*) => 2
*x* => 1
;; *x*がグローバルでspecialではないとき、
(let ((*x* 3))
(progv '(*x*) '(4)
(list *x* (symbol-value '*x*)))) => (3 4)なし。
なし。
let, 3.1. 評価
特に、progvはLisp内に組み込まれた言語の インタプリタを書くときに便利で、 動的変数を束縛する機構を提供します。