# [plt-scheme] Letrect (was blah. units)

Paul Steckler:
>* Robert Bruce Findler:
*>* > In Scheme,...
*>* > (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
*
=====
Yeah.
And then a naive teacher of functional programming tells to his students
that in (letrec ([x <x-expr>]) something), x and <x-expr> belong to the
same environment, without further valuable explanations. And gets into the
black hole. Dear folks, I do not criticize the model nor its priests, but
for a Haskell sectarian this is a poison...
Guess what is (say, in DrScheme) the value of (cadr y) where
(define y
(letrec ((x (cons 1 x)) x)
)
Yes, you guessed it right. Are you happy with it? I am not. But my
personal philosophy was rather coherent than valuable...
Jerzy Karczmarczuk