Internal Definitions (MIT/GNU Scheme 10.1.6)

Previous: Top-Level Definitions, Up: Definitions [Contents][Index]

#### 2.4.2 Internal Definitions

An internal definition is a definition that occurs at the beginning of a body (that is, the body of a `lambda`, `let`, `let*`, `letrec`, `fluid-let`, or “procedure `define`” expression), rather than at the top level of a program. 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))))