Am So., 3. Nov. 2019 um 20:18 Uhr schrieb John Cowan <xxxxxx@ccil.org>: > > > > On Sun, Nov 3, 2019 at 5:34 AM Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote: > >> In R6RS, it can be done with identifier syntax. >> >> As soon as we have syntax-case (or identifier syntax for >> er-macro-transformers) in R7RS, it can also be done there. > > > Note that I don't consider identifier syntax part of syntax-case, and I have very strong reservations about having it at all. It's all very well to say that Lisp programmers (unlike Oscar Wilde's cynic) know the value of everything and the cost of nothing, but without identifier syntax, at least what looks like a variable *is* a variable and not some arbitrary expression under the table. Identifier syntax is too much like Algol-68-style call-by-name (as opposed to call-by-name with explicit lambdas, which is another matter). It is the obligation* of the programmer to make sure that identifier syntax he or she introduces behaves like a variable reference. By the same reasoning as in your argument, one would also have to think of removing user-defined macros from Scheme, I think. But we should probably talk about identifier syntax in detail somewhere else as it does not really belong here. -- Marc (*) In the same sense that it is a programmer's obligation to write readable code. :) P.S.: Use cases of identifier syntax include: (1) Procedures overloaded by macros (as discussed here; see also "define-integrable" in Chez's manual). (2) Definition of immutable variables (where "set!" gives an error). (3) LISP-style dynamic variables/C-style thread-local variables. In all these cases, the syntax is well-behaved (and it can be reasoned about as if variable references were given).