![[LISPWORKS]](../Graphics/LWSmall.gif)
![[Common Lisp HyperSpec (TM)]](../Graphics/CLHS_Sm.gif) 
 ![[Previous]](../Graphics/Prev.gif)
![[Up]](../Graphics/Up.gif)
![[Next]](../Graphics/Next.gif)
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
 
Side Effects: None.
Affected By: None.
Exceptional Situations: None.
See Also:
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*))
![[Starting Points]](../Graphics/StartPts.gif)
![[Contents]](../Graphics/Contents.gif)
![[Index]](../Graphics/Index.gif)
![[Symbols]](../Graphics/Symbols.gif)
![[Glossary]](../Graphics/Glossary.gif)
![[Issues]](../Graphics/Issues.gif)