[plt-scheme] Parameterizing expansion of subexpressions
Ryan Culpepper wrote:
> Neil Toronto wrote:
>> What's the best way to parameterize the expansion of subexpressions?
>> I've tried to make syntax parameters work, but I need the parameter
>> values at expansion time, and it doesn't seem to be made for that.
>
> The solution is ... "syntax-parameters", which is something different
> from using parameters at compile time. Here's the code:
I did try syntax-parameters proper, but I put the syntax-parameterize
*outside* the returned syntax within with-value. Heh.
Anyway, you and McCarthy-sensei have set me straight. I wanted something
like this:
(require (for-syntax syntax/parse)
scheme/stxparam-exptime
scheme/stxparam)
(define-syntax-parameter the-value #'4)
(define-syntax (with-value stx)
(syntax-parse stx
[(_ val:expr e:expr)
#'(syntax-parameterize ([the-value #'val])
e)]))
(define-syntax (observe stx)
(printf "The value is: ~S~n"
(syntax-parameter-value #'the-value))
#'(void))
(observe) ; prints #'4
(with-value (+ 4 5) ; prints #'(+ 4 5)
(observe))
Thanks!
Neil T