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.
;;; TODO rewrite this example, toplevel SETQ is not good
(setq *x* 1)
(progv '(*x*) '(2) *x*)
Assuming *x* is not globally special,