That is really interesting, but.. geez! It really drives home that Common Lisp has too many special forms. This code is practically the simplest code walker possible and it's still 300 lines.
I always wondered why, for example, both LET and LET* need to be special forms, or why both FLET and LABELS need to be. It seems like only one needs to be a special form, and the other could be implemented as a macro on top of the other. TAGBODY seems like it could be written as a macro if your implementation has tail-call optimization. (I'd be interested to see someone give that a try.)
One of the wonderful things in the original conception of Lisp is the small number of primitives: http://lib.store.yahoo.net/lib/paulgraham/jmc.lisp
Vish
On Fri, May 14, 2010 at 8:49 AM, Brian Connoy BConnoy@morrisonhershfield.com wrote:
Justin, you've probably dug this up already. Have a gander at: http://john.freml.in/macroexpand-dammit
BC
On Tue, May 11, 2010 at 12:24:54PM -0400 or thereabouts, Justin Giancola wrote:
While I don't have a presentation per se, I'd like to propose a discussion on macro hygiene and scoping inspired by ideas encountered in Doug's book. I'm going to try to get together a few examples during lunch at work.
toronto-lisp mailing list toronto-lisp@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/toronto-lisp
toronto-lisp mailing list toronto-lisp@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/toronto-lisp