[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Making apostrophe, backtick, etc. hygienic?
From: |
Taylan Ulrich Bayırlı/Kammer |
Subject: |
Re: Making apostrophe, backtick, etc. hygienic? |
Date: |
Sun, 30 Aug 2015 15:16:04 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Panicz Maciej Godek <address@hidden> 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
- Making apostrophe, backtick, etc. hygienic?, Taylan Ulrich Bayırlı/Kammer, 2015/08/30
- Re: Making apostrophe, backtick, etc. hygienic?, Panicz Maciej Godek, 2015/08/30
- Re: Making apostrophe, backtick, etc. hygienic?,
Taylan Ulrich Bayırlı/Kammer <=
- Re: Making apostrophe, backtick, etc. hygienic?, Panicz Maciej Godek, 2015/08/30
- Re: Making apostrophe, backtick, etc. hygienic?, Taylan Ulrich Bayırlı/Kammer, 2015/08/30
- Re: Making apostrophe, backtick, etc. hygienic?, Panicz Maciej Godek, 2015/08/31
- Re: Making apostrophe, backtick, etc. hygienic?, Taylan Ulrich Bayırlı/Kammer, 2015/08/31