help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: macro-replacement with quotes


From: Phillip Lord
Subject: Re: macro-replacement with quotes
Date: Mon, 25 Jan 2016 10:17:26 +0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Marcin Borkowski <mbork@mbork.pl> writes:

> On 2016-01-24, at 22:56, Phillip Lord <phillip.lord@russet.org.uk> wrote:
>
>> Is it possible to build a list within a macro which contains backquote,
>> quote or comma symbols in it?
>>
>> Specifically, I was thinking of building a macro which expands to a
>> pcase form, but I need the ` symbol in the expansion.
>
> I'm not sure whether this would help (I know next to nothing about
> pcase), but would \` and \, suffice for you?
>
> If I do M-: (read) and type `(a ,b), I get (\` (a (\, b))), which seems
> to be equivalent to `(a ,b) in terms of `eval'.  Dunno about pcase,
> though.
>
>> Phil
>
> Best,


Hmm, yes, you are right. I didn't realise that (\` x) was equivalent to
`x, but this works...

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

And this...

(defun quote-and-comma-arg (def)
  (list '\` (list (list '\, (car def)))))

(defmacro p-test (def)
  `(pcase 10
     (,(quote-and-comma-arg def)
      ,(car def))))

(p-test (a))

expands to

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

which returns "10".

The joy of lisp!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]