(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