Hi all,

I've been experimenting with a custom system of managed local variables, 
and I came up with a hygiene test case that was failing. So then I tried 
the same test case with plain Racket variables, and it failed that way too. 
Here's a minimalistic example.

Basically, this is a curried macro: The user supplies a variable and gets a 
macro out, and then the user calls that macro. Can the second macro bind 
the variable the user supplied to the first one? I thought it would be able 
to, but this doesn't currently seem to be case on Racket v7.8 [cs].

Could anyone explain what's going on with this? Is there a workaround if I 
want to write this kind of macro? Should I file a bug in Racket? This looks 
pretty close to R5RS Scheme, so I wonder what the situation in the broader 
Scheme world is like, too.


#lang racket

(require rackunit)

(define-syntax-rule
  (let-second-and-create-let-third var let-third body-of-let-second)
  (let-syntax ([let-third
                 (syntax-rules ()
                   [(let-third body-of-let-third)
                    (let ([var "third"])
                      body-of-let-third)])])
    ; This binding shows that the first macro *does* manage to bind
    ; the given variable, even though the second macro doesn't.
    (let ([var "second"])
      body-of-let-second)))

(check-equal?
  (let ([x "first"])
    (let-second-and-create-let-third x let-third
      (let-third
        x)))
  "third"
  "Test that a macro generated by a macro can bind a variable the user 
supplied to the generator macro")

; FAILURE
; actual: "second"
; expected: "third" 


You can also find this code in Gist form here: 
https://gist.github.com/rocketnia/cb83da2cfcddbf614dfe1dfc5e08792c

Thanks in advance for any insight you have about what's going on here.

- Nia

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/71daa8da-25cf-426b-b709-ee9ed25b53f0n%40googlegroups.com.

Reply via email to