<div dir="ltr">I'm attempting to write a macro which introduces a new id, then another macro that set!s that id. <br>Example:<br><br><div>#lang racket</div><div>(require (for-syntax syntax/parse racket/syntax))</div><div>
(define-for-syntax funny #f)</div><div>(define-syntax (make-funny-set! stx)</div><div>  (syntax-parse stx</div><div>    [(_ v)</div><div>     (define unmarked (generate-temporary))</div><div>     (set! funny (syntax-local-introduce unmarked))</div>
<div>     #`(define #,unmarked v)]))</div><div>(define-syntax (funny-ref stx)</div><div>  (syntax-parse stx</div><div>    [(_)</div><div>     funny]))</div><div>(define-syntax (funny-set! stx)</div><div>  (syntax-parse stx</div>
<div>    [(_ v)</div><div>     #`(set! #,(syntax-local-introduce funny) v)]))</div><div><br></div><div>(make-funny-set! 2)</div><div>(funny-set! 3)</div><div>(funny-ref)<br><br>This program works as I expect, evaluating to 3. However if I change (funny-set! 3) to (void (funny-set! 3)) I get the error: "set!: unbound identifier in module in: g1"<br>
<br>I do not get this error if I change (funny-ref) to (void (funny-ref)).<br><br>If I look at the expansion of the (void (funny-set! 3)) program in drracket's macro stepper the the g1 in (define g1 2) and the g1 in (void (set! g1 3)) have the same color.<br>
<br>To keep on with the strange, if I change the #,(syntax-local-introduce funny) inside of funny-set! to #,funny inside the behavior of all programs remains the same.<br><br>Could someone explain whats going on?<br><br>--Spencer</div>
</div>