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

Re: [Scheme-reports] 4.2.2. binding constructs

On Thu, 2011-05-19 at 13:18 -0400, John Cowan wrote:
> Andy Wingo scripsit:
> > The `let' documentation denotes BODY as "a sequence of one or more
> > expressions".  This does not permit definitions.
> > 
> > Similarly for letrec and letrec*.  
> Fixed.

Honestly, I think that there is an underlying concept here 
in terms of which this should be explained.

The underlying concept is that BODY, up to the closing paren, 
is something called a "binding contour" -- a contiguous region
of the code in which the bindings established by the let clause
are visible.  let* on the other hand establishes a series of 
nested binding contours, one for each variable defined in the 
let*, beginning from each definition and extending to the 
closing paren after the body. 

This is a useful concept because much can be explained in terms 
of it in a very consistent way.  We can say, for example, that 
any binding contour may begin with definitions, that the scope 
of each definition is the entirety of the binding contour in 
which it occurs, that lexical scoping in Scheme is accomplised 
via the proper nesting of binding contours, and several other 
interesting properties.  

Also, a general concept of binding contours and what the anatomy
of a valid binding contour may contain would, hopefully, help 
to avoid making omissions like the above.


Scheme-reports mailing list