[plt-scheme] Re: to define, or to let (last try)
Folks, can you take this thread someplace else, like the graveyard
called comp.lang.scheme?
Your usual great humor, Shriram! Let me apologize for "graveyarding".
At this point only about five people are posting to it, and I get
the sense only about two or three of them even care.
As probably one of the 5, if not the 2 or 3, I request pronouncements
from PLT authority. I thought 3 good points were raised:
[Paul-Bill] definite semantics is great, so Mzscheme's left->right order
is a big improvement over R5RS's ambiguous eval order.
[Anton-Bradd] But sequential programming style (as in Python) is
really bad, so it's good for Scheme to have constructs that indicate
the programmer's belief in independence of eval order, even though the
interpreter can't check/enforce an eval-order-independence violation.
[Joe] Depending on Mzscheme's left->right eval order has a problem:
For 3 expressions EXP*, (foo EXP1 (bar EXP2 EXP3))
is not equivalent to
(let ([arg2 EXP2]
[arg3 EXP3])
(foo EXP1 (bar arg2 arg3)))
In the 2nd EXP1, gets evaluated 3rd, not 1st. In R5RS Scheme, these 2
expressions are pseudo-equivalent, because in ambiguous eval order,
we'd have to make sure that that the eval order of EXP* didn't matter,
or we were buggy to begin with. We'd have to write instead
(let ([arg1 EXP1]
[arg2 EXP2]
[arg3 EXP3])
(foo arg1 (bar arg2 arg3)))
It's long, long, long since lost any relevance to PLT Scheme.
IMO definite-semantics & good-programming-style are relevant to PLT
Scheme. So a possible pronouncement is "PLT is so into functional
programming that arcane mutation questions aren't relevant."