On Thu, 23 Sep 2021, 4:51 am Taylan Kammer, 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. > If you're targeting R6RS implementations, you can use syntax-case to > write such a macro, but it won't be easy. > > If you're targeting R5RS or R7RS-small implementations, you will have to > rely on syntax-rules, which will probably be extremely difficult for this > kind of complex macro. > > Personally I don't even know how I would approach the problem using the > more capable syntax-case, let alone pure syntax-rules. > > -- > Taylan >