>>10
What do you mean by first-class macros? Do you mean Scheme's hygenic ones?
You don't know what first-class means? And you call yourself a Lisper ;)
Let's run down the list shall we?
* can be stored in variables and data structures
* can be passed as a parameter to a subroutine
* can be returned as the result of a subroutine
* can be constructed at runtime
* has intrinsic identity (independent of any given name)
Saying Scheme's macros aren't `real'
As real as CLs
which work by executing real code and generating the output expression objects
You can do the former with syntax-case, and we kinda do the latter (but with syntax objects rather than sexprs, which have additional lexical binding info (and usually source line etc...))
With proper use of gensyms and packages, my macros are just as safe, and a lot more flexible
I'd say the entire point of a "hygienic
by default" macro system is that you don't always need to worry about the former. As for flexiblity, I'm not so sure. The only thing that syntax-rules
can't do is create new (non-"gensym"ed) symbols, and you have syntax-case for that. Oleg Kisolyov even wrote a Scheme->syntax-rules compiler at one point.
since most CL coders simply don't need them and prefer CL's ``real'' macros instead.
Given the general arrogance of Lispers, I'd say they would probably think they were the best thing since sliced bread if they had been mature 20 years ago and was in the CL standard, but since it isn't, it is obviously an inferior toy.