GNU bug report logs -
#61281
“`(a \, b)” equals to “`(a . ,b)”
Previous Next
Full log
View this message in rfc822 format
> > And the question is about "\,", not ",".
> >
> > (setq ,X 42) ; => 42
> > (setq \,X 42) ; => (wrong-type-argument symbolp (\, X))
>
> The other way round.
Yes, I accidentally reversed the comments. Thx.
> "\,X" is interpreted as symbol, just as "\,".
Yes, backslash escapes the special meaning of
comma -- but only outside backquote.
Unescaped comma by itself is not interpreted as
a symbol inside backquote or outside it.
And leaving aside the X:
(setq , 42) ; => (wrong-number-of-arguments setq 1)
; from expansion to (setq (\, 42))
(setq \, 42) ; => 42
Comma is special in raising an error outside
backquote. But there, escaping it makes it
just symbol syntax. Not so inside backquote:
there, escaping it has no effect -- "\," and
"," behave the same inside backquote.
> What's the question about "\,"?
Why is it equivalent to "," inside backquote?
> > (I'd be interested in what the case is in Common
> > Lisp, including what a typical implementation is.)
>
> AFAIU, there are different implementations. I tested two random CL and
> two random scheme interpreters. Of those 4, 3 expanded
> ,X --> (unquote X), and in one case ,X was read as an atomic expression.
Sorry, I don't know what that means. How is
"\," syntax treated inside backquote in those
interpreters?
If different CLs have different behavior in this
regard, then I wonder what the spec says about it
(if anything). I didn't notice anything.
> > The question is whether \, and , should have the
> > same behavior. Certainly \z and z have the same
> > behavior. But character z has no special behavior
> > inside a backquote.
>
> I think the necessity to escape the comma to get the symbol has been
> introduced to avoid ambiguities with uses of the reader macro.
Not sure what you mean. I'd think it's to give
you a way to use comma in a symbol name. Same as
for the other chars you need to escape for that,
such as "(".
Escaping a comma outside backquote works, to give
you symbol syntax, but that doesn't work inside
backquote? Why doesn't it? I don't mean "why" in
terms of "how so". I mean why _should_ that be
the case? Is there a good reason for this behavior
(in terms of useful behavior, not in terms of
implementation)? I don't see any, so far.
> > \@ and @ don't have the same behavior inside a
> > backquote. And neither do \. and . -- only \,
> > and , have the same behavior.
> >
> > To me, that's just an implementation/design
> > thing, not something normal or inevitable.
> > Not a big deal, not the end of the world.
> > [A] minor unfortunate thing (gotcha).
>
> In any case, much too late to change it.
>
> > I pointed to the comments in the code. They tell the story. But I
> > don't think there's any such explanation/description in the doc.
>
> Yes, it would be good to add something.
Glad we agree on something. ;-)
This bug report was last modified 2 years and 127 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.