A few minutes ago, Marijn wrote: > > And so it does, but even in the simplified example I find it hard to > reason about it and come to a conclusion on whether it should return > 1 or 2.
Yes, it is a little tricky. > Do you just look at: > > (define-syntax-rule (make-variable __E__) > (lambda () (let ([_id_ 1]) __E__))) > > and say "__E__ and _id_ are not introduced by the same syntax-rule > pattern, so by hygiene _id_ is not free in __E__ and thus (let ((_id_ > 1)) ...) cannot bind anything in __E__" or how does it work? This sounds like a valid intuition. (BTW, if it was't clear, the above could be fixed by making `_id_' an input to the `make-variable' macro, which should be easy to do in your original code too.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! ____________________ Racket Users list: http://lists.racket-lang.org/users