Subject: bug#61281: Double backquote expansion and ", "

From: Michael Heerdegen <[email-masked]>
Date: Wed, 08 Feb 2023 00:33:04 +0100

Ihor Radchenko <[email-masked]> writes:

> > Anyway, you (only) need to use trivial quoting, it is not necessary and
> > probably not good style to use the symbol "," instead of the reader
> > construct in human written code.

> Could you elaborate?

On what?  You said "We did not find a way to retain "," in the
macro-expanded sexp.", I tried to demonstrate how to handle this.  As
you see, it is not necessary to use "," the symbol, the examples all use
the reader construct syntax and quoting.

If that doesn't answer your question, please ask more specific
questions.

> > Compare:
> >
> > #+begin_src emacs-lisp
> > ;; Substitution at the same place at multiple levels:
> > (let ((f 'my-function))
> >   ``(when (funcall ,,f) (do-something)))
> > ==>
> >  `(when (funcall ,my-function)
> >     (do-something))
> >
> > ;; Substitution once, by outside level backquote:
> > (let ((f 'my-function))
> >   ``(when (funcall ,',f) (do-something)))
> > ==>
> >  `(when (funcall ,'my-function)
> >     (do-something))
> >
> > ;; Substitution once, by the inside backquote
> > ``(when (funcall ,,'f) (do-something))
> > ==>
> >   `(when (funcall ,f)
> >      (do-something))
> >
> >   or simpler:
> >
> > ``(when (funcall ,f) (do-something))
> > ==>
> >   `(when (funcall ,f)
> >      (do-something))
> > #+end_src
> >
> > You probably tried to get some of these cases work, and it's not trivial
> > to get to a solution the first time one encounters this problem.

Michael.