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

Namespaces

This page is part of the web mail archives of SRFI 72 from before July 7th, 2015. The new archives for SRFI 72 contain all messages, not just those from before July 7th, 2015.




I have been wondering about the following technical issue:

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

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?

Cheers
Andre