[racket] macro question

From: Alejandro Zamora (terefv at ltu.sld.cu)
Date: Thu Sep 25 10:49:15 EDT 2014

Thanks Jay!!
nice solution!!
I'm asking for define-macro & R5RS because I'm trying to use one
R5RS Embedded Scheme Interpreter on Python that have only define-macro
construction for make macros and I want to use it.

greetings!
 
 El Thu, 25 Sep 2014 10:17:49 -0400
Jay McCarthy <jay.mccarthy at gmail.com> escribió:
> I won't answer the question about R5RS, but in Racket you can do this
> fairly succinctly:
> 
> #lang racket/base
> (require (for-syntax racket/base
>                      racket/syntax))
> 
> (define-syntax (vars stx)
>   (syntax-case stx ()
>     [(_ id count val)
>      (with-syntax
>          ([(id_i ...)
>            (for/list ([i (in-range 1 (add1 (syntax->datum #'count)))])
>              (format-id #'id "~a~a" #'id i))])
>      (syntax/loc stx
>        (begin (define id_i val)
>               ...)))]))
> 
> (vars id 5 null)
> 
> (vector id1 id2 id3 id4 id5)
> 
> 2014-09-24 22:35 GMT-04:00 Alejandro Zamora <terefv at ltu.sld.cu>:
> > Hi Racket people:
> >         I have a (maybe too simple) question:
> >         How I create one macro like this (but using define-macro &
> >         R5RS language only)?:
> >
> >         (vars sym var-cant val-of-vars)
> >
> >         Example:
> >         (vars id 5 null) -> (prog (define id1 null)
> >                                   (define id2 null)
> >                                   (define id3 null)
> >                                   (define id4 null)
> >                                   (define id5 null))
> >
> > --
> > Nunca digas nunca, di mejor: gracias, permiso, disculpe.
> >
> > Este mensaje le ha llegado mediante el servicio de correo
> > electronico que ofrece Infomed para respaldar el cumplimiento de
> > las misiones del Sistema Nacional de Salud. La persona que envia
> > este correo asume el compromiso de usar el servicio a tales fines y
> > cumplir con las regulaciones establecidas
> >
> > Infomed: http://www.sld.cu/
> >
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
> 
> 
> 


--
Nunca digas nunca, di mejor: gracias, permiso, disculpe.

Este mensaje le ha llegado mediante el servicio de correo electronico que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema Nacional de Salud. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/



Posted on the users mailing list.