[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

expansion of LETREC (hmmm)



    Date: Monday, 7 April 1986  16:31-EST
    From: Gerald Jay Sussman <GJS%OZ.AI.MIT.EDU at XX.LCS.MIT.EDU>
    To:   dyb%indiana.csnet at CSNET-RELAY.ARPA
    cc:   rrrs-authors at MC.LCS.MIT.EDU
    Re:   expansion of LETREC (hmmm)
    ReSent-Date: Mon 7 Apr 86 20:55:41-EST
    ReSent-From: Eddie Gornish <DFUSER.EHG@XX.LCS.MIT.EDU>
    ReSent-To: david@OZ.AI.MIT.EDU
    ReSent-Message-ID: <12197057091.48.DFUSER.EHG@XX.LCS.MIT.EDU>

        ...they  
      felt that LET, LET* and LETREC formed (or should form) a linear
      sequence, each more powerful (in a sense) than the last.

    I think that that is wrong.  LET is more powerful than LET* because
    one can make LET* by nesting LETs but you cannot make LET easily from
    LET*.  Sequential methods are often more convenient than parallel
    ones, but they are inessential.  On the other hand, your
    implementation of LETREC:

       (letrec ((x v) ...) e ...)
         =>
           (let ((x 'any) ...) (set! x v) ... e ...)

    certainly looks pretty good to me.  The question is whether we want to
    specify the order of assignment as being the same as the order of the
    expressions in the LETREC.  I see the same problems arising with
    internal definitions (being just a syntax for a LETREC form).  I
    suppose that I can be moved either way.

What the hell does this mean?