guile-devel
[Top][All Lists]
Advanced

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

Re: new function


From: Damien Mattei
Subject: Re: new function
Date: Thu, 23 Sep 2021 10:40:02 +0200

interesting discussion about "scope",
note i'm not saying i want Scheme+ act as Python, i'm still thinking the best solution...
to be sure about terminology i find this good article about scoping:
https://medium.com/altcampus/scope-local-global-and-lexical-e164f53450b3
Damien

On Wed, Sep 22, 2021 at 11:52 PM William ML Leslie <william.leslie.ttg@gmail.com> wrote:
On Thu, 23 Sep 2021, 4:51 am Taylan Kammer, <taylan.kammer@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.


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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]