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

Re: SCOOPS and obsolete forms



In article <SCP.89May10103519@raven.lanl.gov> 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.
------------------------------------------------------------------------------