# [plt-scheme] units

A bit off-topic, here's a note for further reading.
Robert Bruce Findler wrote:
>* In Scheme, recursive definitions are really shorthand for a sequence of
*>* assignments. As an example, this:
*>*
*>* (letrec ([x <x-exp>]
*>* [y <y-exp>])
*>* <body-exp>)
*>*
*>* is the same thing as this:
*>*
*>* (let ([x #<undefined>]
*>* [y #<undefined>])
*>* (set! x <x-exp>)
*>* (set! y <y-exp>)
*>* <body-exp>)
*
This is the translation suggested by RnRS.
>* In the model (and in ML, on which the model is based), only "valuable"
*>* expressions (ie, those beginning with "lambda" or those that are
*>* constants) are allowed on the right-hand side of a definition, so you
*>* don't need that more complex explanation of mututal recursion.
*
There was a paper in this year's Scheme Workshop, "Robust and effective
transformation of letrec", by Waddell, Sarkar, and Dybvig, that takes
this idea further, reorganizing letrec bindings according
to the "valuable" criterion and others, obtaining some excellent
performance increases over the default RnRS translation.
While looking up this paper, I found that if you search for
"letrec Dybvig scheme" in Google, it helpfully suggests:
Did you mean to search for "lautrec dybvig scheme"?
Something at Google is too loose, IMHO.
-- Paul