My question is, what hinders Arc (or other Lisp if it has the same problem) to create an operator that finds any global symbol from the top, like when an absolute path starts with "/" to find a file?
For instance, let's stay that there is an "unshadowable" operator called "." and let's take your example:
(let foo snoz (jims-macro frotz))
Well, that shadowed "foo" is causing the problem. As you said ("Jim's macro expands into Bob's macro which expands into Ann's macro which uses a helper function called foo."), this symbol is shadowing the actual function "foo" used by Ann's macro.However, if Ann's macro were written carefully (and all macro writes should know that macros can be used in any context, any scope), Ann would care to call "foo" from the top using the "." operator, like:
...
(. foo args) ; excerpt of Ann's macro.
...
In this case, in every "(let)" or another scope definition method, you could always escape to the global scope using this operator, behaving like a hole to the outside world.Of course, I'm just a Lisp newbie, maybe I'm just creating a huge mess with the concepts :-).
Is there any Lisp using that approach?