Re: ANN: first draft of R7RS small language available Aaron W. Hsu (24 Apr 2011 18:47 UTC)

Re: ANN: first draft of R7RS small language available Aaron W. Hsu 22 Apr 2011 04:09 UTC

On Thu, 21 Apr 2011 22:51:34 -0400, Alex Shinn <alexshinn-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

> On Fri, Apr 22, 2011 at 12:25 AM, Aaron W. Hsu <arcfide-5nC73gNclPNzbRFIqnYvSA@public.gmane.org>
> wrote:
>>
>> I am actually really curious about this. In every implementation with
>> which I am familiar, importing a binding from a library results in the
>> same lexical binding. I believe that Andre's second example with MATCH
>> is
>> an interesting one and I am interested to know how you deal with such a
>> thing in Chibi. In fact, could you explain in detail how such an
>> implementation works when it doesn't actually result in the same lexical
>> bindings? How can it make the match example work?
>
> Of course this works in Chibi.  My own `match' macro, which
> is used pervasively in Chibi and Chicken, does the same thing.
>
> When I said that Chibi matches as though all identifiers are
> unbound in the top-level, that was just one way of looking at
> it which lets me claim compatibility without changing the
> text of the syntax-rules literal matching rule:
>
>   A subform in the input matches a literal identifier if and only
>   if it is an identifier and either both its occurrence in the
>   macro expression and its occurrence in the macro definition
>   have the same lexical binding, or the two identifiers are equal
>   and both have no lexical binding.
>
> Another way of looking at this is to change that rule with
> s/lexical/local/g.  In other words, all top-level bindings are
> equivalent for the purpose of literal matching.
>
> The implications for this are that while
>
>   (let ((else #f))
>     (cond (else (display "else clause matched"))))
>
> is required to not display anything as in R5RS,
>
>   (define else #f)
>   ...
>   (cond (else (display "else clause matched")))
>
> would display "else clause matched".  Because the
> else is not local to the usage in question, I think this
> is the more intuitive behavior.

Okay, you seem to be talking about the top-level here. I'm not talking
about the REPL top level when I ask the question above. I'm talking about
inside of a Chibi module; I think you are saying that, given two modules
which import the same third module, the resulting bindings in each of
these two modules are not lexically identical. So I don't understand how
this can result in something like the above working. Andre's example
illustrates what I would expect to go wrong in this case.

Regarding your actual response above, and how these things work at the
top-level, I am very surprised by your second example. I would argue that
"else" in the cond there must refer lexically to the defined "else" and
thus, should be the same as the let form. Indeed, this is basically what I
see in Chez Scheme and other Schemes with which I am familiar. In the
above semantics, how can I make cond *not* have an else clause at the REPL
if I don't want it to have one? Moreover, if I were to write my own
macros, how could I make it possible to do the equivalent for them, too?

	Aaron W. Hsu

--
Programming is just another word for the lost art of thinking.