Macro PROG1, PROG2

UP


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の評価の返却値の主値

定義

prog1first-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

副作用

なし。

影響

なし。

例外

なし。

参考

multiple-value-prog1, progn

備考

prog1prog2は通常、 副作用のあるひとつか複数のフォームを評価し、 その副作用の一部かあるいはすべてが起こる前に計算されなければならない 値を返すために使用されます。


TOP, Github