unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Michael Heerdegen <michael_heerdegen@web.de>
To: help-gnu-emacs@gnu.org
Subject: Re: macro-replacement with quotes
Date: Mon, 25 Jan 2016 15:35:38 +0100	[thread overview]
Message-ID: <87y4bdpw05.fsf@web.de> (raw)
In-Reply-To: 87si1lg3k1.fsf@russet.org.uk

phillip.lord@russet.org.uk (Phillip Lord) writes:

> It's a thought, so I tried this....
>
> (defmacro p-test-2 (var)
>   `(pcase 10
>      ('`(,var) ,var)))
>
>
> but this fails because the ' quotes the ` and the list following it. So
> you get:
>
> (p-test-2 a)
>
> expands
>
> (pcase 10
>   ('`(,var)
>    a))
>
> It's all very complicated isn't it?

It is indeed.

The problem here is that you cant even combine backquote, quote and
unquote like e.g. in macro definitions where you see things like

  ,',var

because the ` in pcase patterns is never expanded by the backquote
macro.

My standard solution to such situations is to use the long forms

 (, thing), (` thing)

and to paste in with , the quoted , or `, so that at the end, you have
what you want (just ` and ,).  That looks like this in your example:

(defmacro p-test-2 (var)
  `(pcase 10
     ((,'\` ((,'\, ,var))) ,var)))

(macroexpand-1 '(p-test-2 a))

==>

(pcase 10
  (`(,a) a))


(hoping this is what you wanted).

I wonder if there is a more elegant solution...


Regards,

Michael.




  reply	other threads:[~2016-01-25 14:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24 21:56 macro-replacement with quotes Phillip Lord
2016-01-24 22:26 ` Marcin Borkowski
2016-01-25 10:17   ` Phillip Lord
2016-01-25 11:10     ` Marcin Borkowski
2016-01-25 14:02       ` Phillip Lord
2016-01-25 14:35         ` Michael Heerdegen [this message]
     [not found] <mailman.2870.1453672579.843.help-gnu-emacs@gnu.org>
2016-01-24 22:45 ` Joost Kremers
2016-01-24 22:50 ` Pascal J. Bourguignon
2016-01-24 22:54   ` Pascal J. Bourguignon
2016-01-24 23:08   ` Joost Kremers
2016-01-25 19:52     ` Pascal J. Bourguignon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y4bdpw05.fsf@web.de \
    --to=michael_heerdegen@web.de \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).