[racket] macro pattern problem

From: Alexander D. Knauth (alexander at knauth.org)
Date: Mon Jan 26 16:57:25 EST 2015

syntax/parse can do that:
#lang racket
(require (for-syntax racket/base syntax/parse syntax/parse/experimental/template))
(define-syntax quote-even
 (syntax-parser
   [(quote-even (~seq att val) ...)
    (template (list (?@ 'att val) ...))]))
(quote-even a 1 b 2) ; '(a 1 b 2)


On Jan 26, 2015, at 4:48 PM, Peter Samarin <petrsamarin at gmail.com> wrote:

> Hello all,
> 
> I want to quote every even and evaluate every odd variable of the input and assemble everything in a list.
> So I wrote the following macro to do it:
> 
> (define-syntax quote-even
>  (syntax-rules ()
>    [(quote-even att val ...)
>     (list 'att val ...)]))
> 
> But in the resulting list, only the very first attribute is quoted:
> 
> (syntax->datum
> (expand-once
>  '(quote-even a 10 b 20 c 30)))
> 
> > (list 'a 10 b 20 c 30)
> 
> (quote-even a 10 b 20 c 30)
> > b: undefined;
> 
> 
> Is there a way to do do it?
> 
> Cheers,
> Peter Samarin
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users



Posted on the users mailing list.