[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


I have been wondering about the following technical issue:

  (let ((x 1))
    (let-syntax ((m (lambda (form)
                      (let ((x 2))
                        (syntax x)))))

There are two possibilities for what this should give, and I am trying to decide which would be the Right Thing. If we regard transformer and runtime varables to live in separate namespaces, the (syntax x) will refer to the outer binding, and we will get the answer 1.

On the other hand, if there is a single namespace, we will get an "Identifier out of context error". This is the answer that both Chez and MzScheme give.

However, while Chez has a single namespace and is therefore self-consistent,
I'm not sure that MzScheme is consistent on this issue, since MzScheme already does have separate namespaces for transformer and runtime environments in the case of toplevel bindings. Am I overlooking something?