|  | ANSI Common Lisp  5 Data and Control Flow  5.3 Dictionary of Data and Control Flow 
 
| 5.3.19  progv | Special Operator |  
 Syntax:
progv
symbols values {form}*
   {result}* 
Arguments and Values:
symbols - a list of symbols; evaluated.
values - a list of objects; evaluated.
 
forms - an implicit progn.
 
results - the values returned by the forms.
 
Description:
progv creates new dynamic variable bindings and
executes each form using those bindings.
Each form is evaluated in  order.
progv allows binding one or more dynamic
variables whose names may be determined at run time.  
Each form is evaluated in order 
with the dynamic variables whose names are in 
symbols bound to corresponding values.
If too few values 
are supplied, the remaining symbols are bound and then
made to have no value. If too many values are
supplied, the excess values are ignored.
The bindings of the dynamic variables are undone on
exit from progv. 
 
Examples:
 (setq *x* 1)  1
 (progv '(*x*) '(2) *x*)  2
 *x*  1
Assuming *x* is not globally special,
 (let ((*x* 3)) 
    (progv '(*x*) '(4) 
      (list *x* (symbol-value '*x*))))  (3 4) 
See Also:
let, Section 3.1 Evaluation
Notes:
Among other things, progv is useful when writing 
interpreters for languages embedded in Lisp; it provides a handle
on the mechanism for binding dynamic variables.
Allegro CL Implementation Details:
 None. |