[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: local syntax-rules
From: |
Ivan Toshkov |
Subject: |
Re: local syntax-rules |
Date: |
Tue, 7 Nov 2000 12:28:47 +0200 |
Ivan Toshkov writes:
> Lars J. Aas writes:
> > On Mon, Nov 06, 2000 at 05:14:08PM +0100, Lars J. Aas wrote:
> > : (define-syntax argtypes
> > : (let-syntax ((argtype (syntax-rules ()
> > : ((argtype (name type)) type)
> > : ((argtype name) <top>))))
> > : (syntax-rules ()
> > : ((argtypes arg) (cons (argtype arg) '()))
> > : ((argtypes arg arg1 ...) (cons (argtype arg) (argtypes arg1
> ...))))))
> > :
> > : Should I use let-syntax in another way (e.g. *inside* the argtypes
> syntax-rules)?
> >
>
> Perhaps the problem is that syntax rules aren't first class scheme objects,
> (don't know if it's true) and therefore let-syntax cannot evaluate to a
> syntax
> rule.
Oops! Totally wrong! Next time I'll know I have to check before I write :)
Syntax rules are procedures.
I'll try to come up with something...
>
> On the other hand, in R5RS is said that there is no analog to local define
> for
> synax definitions, so your problem seems to get tougher.
>
> > I found putting them inside the rules to work:
> >
> > (define-syntax argtypes
> > (syntax-rules ()
> > ((argtypes arg)
> > (let-syntax ((argtype (syntax-rules ()
> > ((argtype (name type)) type)
> > ((argtype name) <top>))))
> > (cons (argtype arg) '())))
> > ((argtypes arg arg1 ...)
> > (let-syntax ((argtype (syntax-rules ()
> > ((argtype (name type)) type)
> > ((argtype name) <top>))))
> > (cons (argtype arg) (argtypes arg1 ...))))))
> >
> > However, this makes me have to repeat the submacros for each public
> syntax-rule,
> > making the whole thing an unreadable mess. Isn't a shared approach (like
> the
> > invalid example on top) possible? I tried to enclose the syntax rules
> through
> > let-variables, but that didn't work either:
> >
> > (define-syntax argtypes
> > (let ((argtype-rules (syntax-rules ()
> > ((argtype (name type)) type)
> > ((argtype name) <top>))))
> > (syntax-rules ()
> > ((argtypes arg)
> > (let-syntax (argtype argtype-rules)
> > (cons (argtype arg) '())))
> > ((argtypes arg arg1 ...)
> > (let-syntax (argtype argtype-rules)
> > (cons (argtype arg) (argtypes arg1 ...)))))))
> >
> > Any suggestions? I'll rather use public sub-macros than the let-syntax
> approach
> > I found to work...
> >
>
> If I think of something I'll let you know :) Meanwhile, why don't you try to
> post your question in comp.lang.scheme and see what they have to say about
> it?
> I guess most of the guile developers/users prefer lisp-style macros and
> that's
> why you don't get many answers here...
>
> > Lars J
> >
> > _______________________________________________
> > Guile-user mailing list
> > address@hidden
> > http://mail.gnu.org/mailman/listinfo/guile-user
> >
>