I'm not a lisp pro (more like aspiring to be), but, for what it's worth, I think your use of eval is fine. It doesn't suffer from the "double evaluation" problem, and evaluation at compile time is actually what you want.<p>If you really want to get rid of eval in the macro, though, I suppose you could hard-code your loop to all-specs rather than attempt to supply the list as an argument. This would be contingent on all-specs being present in the compilation environment, via an eval-when or something.