On Apr 25, 2016, at 3:08 PM, Alexis King <lexi.lam...@gmail.com> wrote:
> 
> Even more generally, if you want macros to compose in a more arbitrary
> and less structured way, you can call local-expand from the containing
> macro in order to “flip” evaluation order as I believe you described
> in your original message.

I tried that but got hung up on the "identifier tainted by macro expansion" 
error. But after some experimentation I see that `syntax-disarm` will cure 
this. Thus the answer to my original question about what `magic-goes-here`:


;;;;;;;;;;;;;;;;;;

#lang racket 

(define-syntax-rule (id-maker _a "," _b "," _c) 
  (_a _b _c)) 


(define-syntax (binding-form stx)
  (syntax-case stx ()
    [(_ _topid inside-macro)
     (with-syntax ([(_id ...) (syntax-disarm
                               (local-expand #'inside-macro
                                             'expression
                                             #f) #f)])
       #'(begin
           (provide _topid)
           (define (_topid) 
           (let ([_id (random)] ...) 
             (displayln (format "~a bound ~a with value ~a" '_topid '_id _id)) 
...))))]))

(binding-form foo (a b c)) 
(foo) ; works 


(binding-form bar (id-maker d "," e "," f)) 
(bar) ; works

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to