[plt-scheme] Re: to define, or to let

From: Bradd W. Szonye (bradd+plt at szonye.com)
Date: Mon Apr 26 22:49:44 EDT 2004

Paul Schlie wrote:
> Rather than hashing through each point, please consider the following
> observations to your various points:
> - evaluation order refers to "evaluation", if the author of a macro chooses
> to effectively reorder arguments prior to their evaluation, that¹s their
> prerogative; however regardless of their choice, the resulting program
> should be semantically (behaviorally) unambiguous, which can only be
> achieved by specifying evaluation order.

And in R5RS Scheme, correct programs do have unambiguous semantics, at
least with respect to evaluation order. Only programs that violate the
order independence rule are ambiguous, and the existence of explicit
sequencing constructs makes it easier to detect them.

> - if two programs (utilizing any combination of expressions and/or
> macros), are equivalent under R5RS, and not if argument order is
> specified; then those same two programs are behaviorally ambiguous
> under R5RS ....

No, they aren't! If they're equivalent, then they both behave the same
way. Therefore, there is no ambiguity.

> Rather than continuing to argue about the hypothetical merits of
> unspecified evaluation order, I'll abstain, and wait for someone to
> produce a code fragment which benefits from it's resulting ambiguity.

Every example that uses LET or LET* correctly benefits from having two
separate constructs for sequential and non-sequential behavior. The only
programs that benefit from merging the two are programs that fail to
specify sequentiality -- which is a bug.

> (which I am confident no one will be able to produce)

If so, then you simply fail to understand the benefits of separate
sequencing constructs, which have already been described at length.
Meanwhile, you incorrectly claim that R5RS programs are "ambiguous."
Bradd W. Szonye

Posted on the users mailing list.