On 22.09.2021 23:52, William ML Leslie wrote: > On Thu, 23 Sep 2021, 4:51 am Taylan Kammer, <taylan.kam...@gmail.com > <mailto:taylan.kam...@gmail.com>> wrote: > > On 22.09.2021 11:53, Damien Mattei wrote: > > i already do it this way for internal defines ,using a recursive macro > that build a list of variable using an accumulator. It can works but macro > expansion seems slow, it was not immediate at compilation on a little example > (oh nothing more that 2 seconds) but i'm not sure it is easily maintainable, > it is at the limit what macro can do i think ,for speed reasons. In fact i > can not really understand in Guile as it is based on C and compiled when > macro expansion happens,what is the time cost... so for all those ,perhaps > not objective reason ,i prefer to avoid. > > I don't think there's any other way to achieve what you want, especially > using portable Scheme code. The lexical scoping semantics of Scheme are > a very fundamental part of the language, and cannot be worked around in > portable Scheme code without using a macro that rewrites whole bodies of > lambda expressions. > > Even using implementation-specific hacks, you won't get very far. Any > compiled Scheme implementation, and even most interpreted ones, won't > allow you to modify an outer scope's set of variable definitions from > within an inner scope. > > So if you really want to have Python's scoping semantics in Scheme, you > will probably have to write a complex 'def' macro that walks through the > body and "hoists" variable definitions to the outermost scope. > > > Python is lexically scoped, and the assignment here is supposed to be local.
Well, yes and no. It implements variable hoisting, meaning all previously unset variables that are set within a function are implicitly declared at the beginning of the function. It doesn't have sub-scopes in function bodies. -- Taylan