On Oct 16, 2012, at 3:25 PM, Jon Rafkind wrote:

> This is what syntax-parameters are for.
> 
> (require racket/stxparam)
> (define-syntax-parameter m (lambda (stx) (raise-syntax-error 'm "dont use 
> this outside deeper")))
> 
> (define-syntax-rule (deeper e)
>    (syntax-parameterize ([m (lambda (stx) #'1)])
>       e))
> 
> (deeper (m)) -> 1

Okay, this makes sense; I'm just deeply freaked out (temporarily, I presume) 
that the syntax-parameterize occurs in the phase 0 code, and not the phase 1 
code; rather than doing the transformation that I want to do during the 
evaluation of the macro, I'm embedding it in another macro, to be evaluated 
later.

Sure! I'm okay with that. Um… I think.

Thanks,

John

> 
> On 10/16/2012 04:18 PM, John Clements wrote:
>> This seems like a straightforward question; apologies if I just haven't dug 
>> deep enough to find the answer.
>> 
>> I want to define a macro whose meaning depends on its context. More 
>> specifically, I want to define an "outer" macro that gives a particular 
>> meaning to the "inner" macro. 
>> 
>> I can see how to get the job done in a yucky way, using mutation:
>> 
>> #lang racket
>> 
>> ;; I want m's meaning to depend on its context
>> (define-syntax (m stx)
>>   #`#,(unbox the-box))
>> 
>> (define-syntax (deeper stx)
>>   (syntax-case stx ()
>>     [(_ arg)
>>      ;; I want to change the meaning of m, here:
>>      (set-box! the-box 16)
>>      #'arg]))
>> 
>> ;; yucky mutation-based way to get the job done
>> (define-for-syntax the-box (box 13))
>> 
>> 
>> (deeper (m 134))
>> 
>> 
>> … but it seems like there must be a simple way for the outer binding to say 
>> "whatever meaning the inner macro wants it to have".
>> 
>> Don't tell me, it's define-for-inner-syntax/local-expand. I just made that 
>> up, so I hope it's wrong :).
>> 
>> John
>> 
>> 
>> 
>> 
>> ____________________
>>   Racket Users list:
>>   
>> http://lists.racket-lang.org/users
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

Attachment: smime.p7s
Description: S/MIME cryptographic signature

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to