letrec*


letrec* is a new feature in r6rs which is letrec with left-to-right evaluation order. Also internal defines now follow letrec* semantics. The reasoning behind this is letrec* "Does the Right Thing" in that all names in a letrec* are bound in all clauses of the letrec*, but only the ones above you are defined to you.

 (define-syntax letrec* 
   (syntax-rules () 
     ((LETREC* ((variable expression) 
                ...) 
        body0 
        body1 
        ...) 
      (LET ((variable (UNINITIALIZED)) 
            ...) 
        (SET! variable expression) 
        ... 
        (LET () 
          body0 
          body1 
          ...))))) 

category-code