|
ANSI Common Lisp 5 Data and Control Flow 5.3 Dictionary of Data and Control Flow
5.3.58 prog1, prog2 |
Macro |
- Syntax:
-
prog1
first-form {form}*
result-1
prog2
first-form second-form {form}*
result-2
- Arguments and Values:
-
first-form - a form; evaluated as described below.
second-form - a form; evaluated as described below.
forms - an implicit progn; evaluated as described below.
result-1 - the primary value resulting from
the evaluation of first-form.
result-2 - the primary value resulting from
the evaluation of second-form.
- Description:
-
prog1 evaluates first-form
and then forms,
yielding as its only value
the primary value yielded by first-form.
prog2 evaluates first-form,
then second-form,
and then forms,
yielding as its only value
the primary value yielded by first-form.
- Examples:
-
(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
- See Also:
-
multiple-value-prog1,
progn
- Notes:
-
prog1 and prog2 are typically used to evaluate
one or more forms with side effects and return a value that
must be computed before some or all of the side effects happen.
(prog1 {form}*) ==(values (multiple-value-prog1 {form}*))
(prog2 form1 {form}*) ==(let () form1 (prog1 {form}*))
- Allegro CL Implementation Details:
-
The ANS contains this obvious typo: where is says of prog2
above: 'prog2 evaluates first-form, then second-form, and then forms,
yielding as its only value the primary value yielded by first-form',
it should say 'yielding as its only value the primary value yielded by
second-form' and that is what Allegro CL implements.
|