<div dir="ltr">Thanks Bill, that&#39;s helpful. So is the (with-let (rootlet) ...) idiom something that is unique to S7 then? (or at least, with those functions?)  That has turned out to be really helpful in ensuring that I can separate load time and run time in Max, even for definitions I want happening at top level. I suppose this is somewhat similar to the way in pre ES6 javascript one could make namespace-modules by &quot;abusing&quot; anonymous function scope. <div><br></div><div>I remember this came up a while back on this list (I think Christos was discussing it?), have you any inclinations to make a more formal module definition syntax/standard for S7? It might be helpful in terms of documentation/adoption. I&#39;ve heard good things in Lisp-internet-ramblings about Gerbil&#39;s module system on top of Gambit. I wonder if that would be worth checking out. (just thinking aloud here, not proposing!)</div><div><br></div><div>At any rate, now that I am over the hump of the nasty Max C SDK coding part of Scheme for Max (I think! I hope!) I look forward to digging into the Scheme side a lot more thoroughly. :-)</div><div>iain</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 14, 2021 at 6:14 AM &lt;<a href="mailto:bil@ccrma.stanford.edu">bil@ccrma.stanford.edu</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&gt; Which other Scheme and Lisp implementations have environments similar <br>
&gt; to S7?<br>
<br>
I don&#39;t know of any that are similar to s7, but the underlying<br>
ideas are not new.<br>
<br>
Both Common Lisp and Scheme have rudimentary support for environments.<br>
I believe r5rs scheme had null-environment and scheme-report-environment<br>
(the top-level?), but they are immutable.  CL had augment-environment<br>
(or was this ACL?).  MIT Scheme had a way to make a new environment,<br>
and probably a way to pass it to eval.  I think in Guile you can pass<br>
a module to eval, treating it as an environment.  I think you mentioned<br>
earlier that Clojure had name spaces -- I don&#39;t know if they can be used<br>
by the evaluation process.<br>
<br>
Anyway, it seemed to me that lets,<br>
environments, name-spaces, dictionaries, etc are all the same thing<br>
and it would be interesting to make it possible for the programmer to<br>
use them (as first class environments) during evaluation. A let then<br>
becomes what other schemes call a module or library.  In hygienic macros<br>
the implementor no longer has to intuit what environment a given name<br>
comes from.  A lot of things become simpler.<br>
<br>
</blockquote></div>