Panicz Maciej Godek <godek.mac...@gmail.com> writes: > You mean that #'x is synonymous to (syntax x), and that's where the > problem stems from?
Yup. I shadow 'syntax', but I don't explicitly shadow "#'". It gets shadowed implicitly. Lexical scoping and hygiene are supposed to let the programmer forget about such worries. > I think that every lisper should know that 'x is synonymous to (quote > x), and in some contexts it might be desirable to bind a new meaning > to the "quote" form (and this is already done by some libraries, > notably in the (ice-9 match) module). One may know, but still forget when sufficiently tired, and/or when using the word "quote" to mean something conceptually different than the quoting in lisp. For instance, some kind of text processing program might give the term "quote" a specific meaning in the program's problem domain, and once you're immersed deeply enough in this domain, you might find yourself naming some function parameter "quote" without giving it a second thought. Kind of difficult to explain what I mean, but I know it happens to me when I'm not careful. As another example, it also keeps happening to me that I write code like: (syntax-rules () ((_ foo) (begin ... (let ((foo bar)) ...)))) where I forget that the 'foo' there will not be bound freshly by that let form, and that despite that I understand how 'syntax-rules' works very well (externally, not necessarily internally!). One is just accustomed to be able to let-bind whatever one wants, and lexical scoping and hygiene take care of all worries ... except when not. :-) (In this case it has nothing to do with quote/syntax/etc., just giving an example of what silly mistakes I can make when not careful.) (Nowadays I name all my pattern variables <foo> for that reason. Reads like BNF too, which is nice. And I don't see it ever clashing with record type names in practice.) > As to "syntax", the use of #'x is much rarer, and the idea that #'x is > (syntax x) is indeed a bit controversial. But this regards the whole > syntax-case macro system, and I think that it would be more valuable > to think how to fix its flaws, rather than change the very > fundamentals of the language. Hmm, I'm not sure what flaws of syntax-case you have in mind. IMO it's a pretty nice system. But either way, I don't think making #'foo expand to (__syntax__ foo), and simply making __syntax__ a synonyms to syntax, are fundamental changes. I would have thought it's a rather superficial change... > Best regards, > M. Kind regards, Taylan