% Macro PROG1, PROG2
Macro PROG1
, PROG2
prog1
first-form form* => result-1
prog2
first-form second-form form* => result-2
first-form - フォーム。下記の説明に従って評価されます。
second-form - フォーム。下記の説明に従って評価されます。
form - フォーム。下記の説明に従って評価されます。
result-1 - first-formの評価の返却値の主値
result-2 - second-formの評価の返却値の主値
prog1
はfirst-formを評価したあとでformを評価し、
first-formによって生成された主値のみを返却します。
prog2
は最初にfirst-formを評価し、
その次にsecond-formを評価し、
そのあとformを評価して、
second-formによって生成された主値のみを返却します。
(setq temp 1) => 1
(prog1 temp (print temp) (incf temp) (print temp))
>> 1
>> 2
=> 1
(prog1 temp (setq temp nil)) => 2
temp => NIL
(prog1 (values 1 2 3) 4) => 1
(setq temp (list 'a 'b 'c))
(prog1 (car temp) (setf (car temp) 'alpha)) => A
temp => (ALPHA B C)
(flet ((swap-symbol-values (x y)
(setf (symbol-value x)
(prog1 (symbol-value y)
(setf (symbol-value y) (symbol-value x))))))
(let ((*foo* 1) (*bar* 2))
(declare (special *foo* *bar*))
(swap-symbol-values '*foo* '*bar*)
(values *foo* *bar*)))
=> 2, 1
(setq temp 1) => 1
(prog2 (incf temp) (incf temp) (incf temp)) => 3
temp => 4
(prog2 1 (values 2 3 4) 5) => 2
なし。
なし。
なし。
prog1
とprog2
は通常、
副作用のあるひとつか複数のフォームを評価し、
その副作用の一部かあるいはすべてが起こる前に計算されなければならない
値を返すために使用されます。