Perhaps this is closer to what you want: (defmacro balance-sounds (&rest exprs) (let* ((temps '()) (calls (mapcar #'(lambda (expr) (let ((tmp (gentemp))) (push tmp temps) (list tmp expr))) exprs))) `(sound-let ,calls (balance , at temps)))) or (balance ,@(reverse temps)) -- not sure which order you want.