ToC | DocOverview | CGDoc | RelNotes | Index | PermutedIndex
| Allegro CL

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

© Franz Inc. All Rights Reserved - File last updated 2022-07-25