(define-syntax bind-test0
(lambda (stx)
(define id #'x)
(define shifted-id (syntax-shift-phase-level id -1))
(syntax-case stx ()
[(_ e)
#`(let ([#,id e])
(displayln #,shifted-id))])))
(define-syntax bind-test1
(lambda (stx)
(define id #'x)
(define shifted-id (syntax-shift-phase-level id -1))
(syntax-case stx ()
[(_ e)
#`(let ([#,shifted-id e])
(displayln #,id))])))
(bind-test0 100) would display 100, but (bind-test1 100) would raise an error. I'm new to Racket, so if this is in fact the correct behavior, a pointer to some related documentation would be appreciated.
Thanks,
Yongming