>>>> "Clemens" == Clemens Heitzinger
<cheitzin(a)rainbow.studorg.tuwien.ac.at> writes:
Clemens> sperber(a)informatik.uni-tuebingen.de (Michael Sperber [Mr. Preprocessor])
writes:
> >> Hygiene, however, means that variables in macros obey
the same scoping
> >> rules as the rest of the language. WITH-HYGIENIC-VARIABLES gives you
> >> no help whatsoever referring to lexical bindings of the macro. CL
>
Clemens> What help do you mean?
The help hygienic macros give you: an identifier always refers to its
lexically enclosing binding.
>
> >> macros are not hygienic, period.
>
Clemens> Nobody claimed that. I wanted to make the point that it is quite
easy
Clemens> to define hygienic macros in CL.
Huh? Re-read your sentence, please.
> And I made the point that what you're talking about is not
hygiene.
> You still need explicit annotations to prevent variable capture, at
> definitions *and* uses. This is tedious and error-prone. You're
> doing nothing to respect the binding rules of the underlying language.
Clemens> (I don't understand your last sentence.)
What you're doing is renaming variables so that they are unique. This
means that you avoid name clashes with other names. This still
doesn't mean an identifier in a macro has the same semantics as
everywhere else. It merely means that you simulate the semantics in
some cases. You don't in others. Holger and I have exchanged
examples in this very thread.
Clemens> Where do I need explicit annotations? At definition time, I
Clemens> say which hygienic variables I want. This is an explicit
Clemens> annotation.
And you have to write an unquote before every use. This means you
have annotations everywhere.
Clemens> On the other hand, I don't think that in Scheme you can say
Clemens> you want this and that variable *not* to be hygienic.
No, but (to quote Craig in this discussion :-}) why would you want
this?
Kidding aside, the real peeve may be with the limitations a pattern
language imposes upon you. However, I've so far always found a way to
make do with it.
Clemens> In CL you can have both behaviours, in Scheme only one.
As I explained, in CL you only have the non-hygienic option. You can
hack around it, but it's still not going to do the right thing in all
cases.
--
Cheers =8-} Chipsy
Friede, Völkerverständigung und überhaupt blabla