[racket] Splicing a variable to serve as let declarations
Hmm. That does appear to work at a global level, but then when you attempt
to use it inside of a function it returns "identifier used out of context".
Trying to define-for-syntax in a local context also causes problems;
"begin-for-syntax: not in a definition context in: (begin-for-syntax
(define-values (z) lst))"
On Mon, Dec 8, 2014 at 10:17 PM, Alexander D. Knauth <alexander at knauth.org>
wrote:
> Would something like this work for what you want?
>
> #lang racket
> (require (for-syntax syntax/parse))
> (define-for-syntax dave '((is 5) (fat 6)))
> (define-syntax letexpand
> (syntax-parser
> [(_ alst body ...)
> (with-syntax ([alst (syntax-local-introduce #`#,(eval-syntax
> #'alst))])
> #'(let alst body ...))]))
> (letexpand dave is fat)
>
> On Dec 8, 2014, at 2:46 AM, J Arcane <jarcane at gmail.com> wrote:
>
> > I've been experimenting with a new feature for Heresy, and I find myself
> in need of a macro that can insert the contents of an a-list into a let
> syntax to serve as its definitions. I am utterly failing to accomplish
> this. It seems like it should be simple enough to splice a variable's
> contents into the syntax, and in a sense it is, but not if I want it to
> actually then evaluate.
> >
> > For example, I can do this:
> >
> > (define dave '((is 5) (fat 6)))
> >
> > (define-syntax letexpand
> > (syntax-rules ()
> > [(_ alst body ...)
> > #`(let #,alst body ...)]))
> >
> > (letexpand dave is fat)
> >
> > Which returns a syntax object which looks like what I want:
> >
> > #<syntax:...:8:7 (let ((is 5) (fat 6)) is fat)>
> >
> > But doesn't actually the evaluate that object. But doing that with
> merely (let alst body ...) creates an error because rather than splicing
> alst's contents itself, it merely inserts the variable name given, and then
> fails because let doesn't recognize it. It will work with a handwritten
> unquoted alist in that space, but this is largely useless because of course
> that's what let already basically does anyway.
> >
> > Am I starting in the wrong place here, and if not, how do I turn that
> syntax object into something that actually evaluates?
> > ____________________
> > Racket Users list:
> > http://lists.racket-lang.org/users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20141209/80e53650/attachment.html>