Plaster
New
List
Login
common-lisp
default
anonymous
2022.04.27 20:27:48
(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.
Raw
Annotate
Repaste
Edit