Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!cornell!uw-beaver!rice!titan!dorai From: dorai@titan.rice.edu (Dorai Sitaram) Newsgroups: comp.lang.scheme Subject: Re: SCOOPS and obsolete forms Message-ID: <3246@kalliope.rice.edu> Date: 10 May 89 19:31:06 GMT References: Sender: usenet@rice.edu Reply-To: dorai@titan.rice.edu (Dorai Sitaram) Organization: Rice University, Houston Lines: 39 In article scp@raven.lanl.gov (Stephen Pope) writes: >Second, SCOOPS made use of the REC special form. This was apparently >removed from the language as of R3RS. In any case, I got runtime >errors (Unbound variable NAME). It is always used in the form: > > ((rec name (lambda ...)) args ...) > >where name needs to recursively call itself. I'm no SCHEME wizard, >but it seemed the proper equivalent was: > > (let ((name (lambda ...))) (name args ...)) > >which appears to run just fine. > >Can anybody enlighten me on the subject of REC and its demise? Your equivalent should have a LETREC rather than a LET. Any REC-expression (not just in the application-context you mention and not just for LAMBDA-forms either) can be stated with a LETREC (which in its term is based on LAMBDA and SET!) as follows: (rec name exp) == (letrec ([name exp]) name) A possible reason for not mentioning REC as "essential syntax" in R3RS could be that the corresponding LETREC-equivalent is quite as readable. LETREC, of course, has more claim to the status of "essential syntax" since, in contrast to REC, it can also introduce several mutually recursive bindings. It is probably stretching it a bit to think of REC's omission from R3RS in such tragic terms as "demise". Any basic macro facility can resurrect it for you. --dorai ------------------------------------------------------------------------------ It may be that the gulfs will wash us down; It may be we shall touch the Happy Isles. ------------------------------------------------------------------------------