DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(r5rs.info.gz) Internal definitions

Info Catalog (r5rs.info.gz) Top level definitions (r5rs.info.gz) Definitions
 
 5.2.2 Internal definitions
 --------------------------
 
 Definitions may occur at the beginning of a <body> (that is, the body
 of a `lambda', `let', `let*', `letrec', `let-syntax', or `letrec-syntax' expression
 or that of a definition of an appropriate form).  Such definitions are
 known as _internal definitions_  as opposed to the top level
 definitions described above.  The variable defined by an internal
 definition is local to the <body>.  That is, <variable> is bound rather
 than assigned, and the region of the binding is the entire <body>.  For
 example,
 
 
      (let ((x 5))
        (define foo (lambda (y) (bar x y)))
        (define bar (lambda (a b) (+ (* a b) a)))
        (foo (+ x 3)))                       ==>  45
 
 A <body> containing internal definitions can always be converted into a
 completely equivalent `letrec' expression.  For example, the `let'
 expression in the above example is equivalent to
 
 
      (let ((x 5))
        (letrec ((foo (lambda (y) (bar x y)))
                 (bar (lambda (a b) (+ (* a b) a))))
          (foo (+ x 3))))
 
 Just as for the equivalent `letrec' expression, it must be possible to
 evaluate each <expression> of every internal definition in a <body>
 without assigning or referring to the value of any <variable> being
 defined.
 
 Wherever an internal definition may occur (begin <definition1> ...,) is
 equivalent to the sequence of definitions that form the body of the
 `begin'.  
 
Info Catalog (r5rs.info.gz) Top level definitions (r5rs.info.gz) Definitions
automatically generated byinfo2html