Date: Fri, 19 Mar 2010 12:03:35 -0700 From: Joe Marshall <jmarsh...@alum.mit.edu>
The tokens `:yes' and `:no' don't need quoting or unquoting or any careful attention to what level of expansion they will be quoted at. They are just literal symbolic tokens that get no special treatment by the evaluator just because they are symbols. As I said before, one could do without keywords and just use symbols, and then you'd have to think a bit harder about which ones to quote and unquote at which level, but you could do it. It is just a convenience. But then, LET is simply a trivial convenience over using LAMBDA. When you're writing the macro you need to decide what its evaluation rules are. You can defer parts of that decision to some other operator by passing subforms of the input to an invocation of the other operator. Introducing self-evaluating symbols doesn't make the decision any easier or more convenient, however. It only makes certain uses of macros independent of that decision. I still don't buy it, and I'm afraid I got lost in your example -- there were about a dozen keywords involved, and it was not clear to me which ones needed to be self-evaluating objects and how that had anything to do with how much quoting and unquoting you needed to write in your macro. I agree that your macro looked hairy, but its hairiness was unrelated to the use of keywords with ECASE. _______________________________________________ MIT-Scheme-devel mailing list MIT-Scheme-devel@gnu.org http://lists.gnu.org/mailman/listinfo/mit-scheme-devel