Plaster

common-lisp
(defmacro with-gensym (syms &rest body) "Binds a gensym to each list argument" `(let (mapcar #'(lambda (s) `(,s (gensym))) ',syms) ,@body)) ; WITH-GENSYM (macroexpand '(with-gensym (a b c) (progn (print-gensym a) (print-gensym b) (print-gensym c)))) ; (LET (MAPCAR (FUNCTION (LAMBDA (S) `(,S (GENSYM)))) (QUOTE (A B C))) ; (PROGN (PRINT-GENSYM A) (PRINT-GENSYM B) (PRINT-GENSYM C))) ; T (mapcar #'(lambda (s) `(,s (gensym))) '(a b c)) ; ((A (GENSYM)) (B (GENSYM)) (C (GENSYM))) (with-gensym (a b c) (progn (print-gensym a) (print-gensym b) (print-gensym c))) ; The variable B is unbound.