Re: efficiency of let used in a binding

From: Christopher Oliver <>
Date: Tue, 21 Oct 1997 14:27:39 -0400 (EDT)

On 21 Oct 1997 David Fox wrote:
> There is some disagreement about what define means when it is not
> at the top level.

There shouldn't be, at least regarding top levels. From R4RS:

  "A <body> containing internal definitions can always be con-
  verted into a completely equivalent letrec expression."

This precludes changing the top-level with an internal definition.

The only vagueness I see, based on a quick experiment with STk, Bigloo,
and MzScheme, is the handling of internal definition interspersed with
non-definition forms. MzScheme rejects these, but they COULD be thought
as nested letrecs. I.e. each letrec gathers a clustered sequence of

        (define (x n)
          (define (y n) (+ n 3))
          (define (z n) (* 3 n))
          (set! foo 'bar)
          (define (a n) (- 15 n))
          (define (b n) (/ n 24))
          (a (b (x (y n)))))
        (define (x n)
          (letrec ((y (lambda (n) (+ n 3)))
                   (z (lambda (n) (* 3 n))))
            (set! foo 'bar)
            (letrec ((a (lambda (n) (- 15 n)))
                     (b (lambda (n) (/ n 24))))
              (a (b (x (y n)))))))

I don't see anything to support this or reject this though.


Christopher Oliver                     Traverse Communications
Systems Coordinator                    223 Grandview Pkwy, Suite 108                    Traverse City, Michigan, 49684
"You can even make Emacs look just like vi -- but why?"  - C. Musciano
Received on Tue Oct 21 1997 - 19:25:34 CEST

This archive was generated by hypermail 2.3.0 : Mon Jul 21 2014 - 19:38:59 CEST