Re: [Scheme-reports] Module-level BEGIN is not a BEGIN - please call it something else Andre van Tonder (24 Apr 2011 17:59 UTC)

Re: [Scheme-reports] Module-level BEGIN is not a BEGIN - please call it something else Andre van Tonder 24 Apr 2011 17:57 UTC

On Sun, 24 Apr 2011, John Cowan wrote:

> Andre van Tonder scripsit:
>
>> It cannot be replaced by the sequence it encloses as in all other
>> instances of BEGIN.
>
> Not all BEGINs can be removed in this way: (if (p) (begin (a) (b)) (c))
> cannot be rewritten as (if (p) (a) (b) (c)), for example.  BEGIN is
> already very overloaded, but the concept is the same.

Granted, but nowhere else does BEGIN introduce a new lexical scope.

>> In fact, the outer BEGIN is bound (part of the module language) while
>> the inner BEGIN is unbound (since the base library is not imported).
>
> In fact, there is no concept of binding in the module language, which is
> not Scheme.

Okay, but still, in the example

   (module (foo)
     (begin (begin 1)))

the outer BEGIN has a meaning and the inner begin is unbound and therefore
has no meaning.

So I guess my biggest problem with this overloading is that module
BEGIN does not just indicate a sequence, but also delimits a lexical
scope.  This makes it morally very different form all the other BEGINs,
which never delimit a new lexical scope.

_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports