[plt-scheme] Re: to define, or to let (last try)

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Tue Apr 27 16:10:41 EDT 2004

For heaven's sake, don't you guys have any useful work to do? Write a 
new collects for PLT? Build a killer-app in Scheme?

-- Matthias

On Apr 27, 2004, at 3:32 PM, Joe Marshall wrote:

>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> Paul Schlie <schlie at comcast.net> writes:
>>   For list-related administrative tasks:
>>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>> In turn, let me try for the final time to dispel some rumors:
>> - all programs which abide by scheme's syntax are "correct", 
>> regardless
>>   of their usefulness (and/or ambiguity under R5RS specifications).
> Not true.  (car 42) is generally considered incorrect.  Some scheme
> systems consider
> (call-with-current-continuation (lambda (c) (0 (c 1))))
> to be incorrect.
>> - the present order-of-evaluation ambiguity as presently specified by
>>   R5RS doesn't "assert" anything, it simply enables the specification
>>   of "correct" programs which have ambiguous behaviors if any of its
>>   arguments which are subject to unspecified evaluation order share
>>   mutable state (such as basic as I/O functions do).
> Partially true.  The unspecified order of evaluation does not `assert'
> anything about a program (it does assert that no implementation is
> in violation by specifying a particular order of evaluation).
> One may, of course, write programs whose behavior depends on the order
> of evaluation.  One may do this whether the order is specified or
> not.
>> - if there is a community interest in enabling scheme to specify
>>   immutable functions ... then it should be addressed directly,
>>   not by attempting to argue for unspecified evaluation order...
> I don't argue this as a rationale.
>>   which only ironically enables such function use to be
>>   potentially ambiguous, but not deterministically so from 
>> implementation
>>   to implementation, to no-ones benefit; nor as easily diagnosed as an
>>   immutable function definition/assertion would be (which although 
>> would
>>   be nice, it's not as truly as necessary as eliminating R5RS's 
>> presently
>>   unspecified evaluation order ambiguity is, as mutable functions are 
>> both
>>   useful and occasionally necessary, and corresponding their use 
>> should not
>>   yield ambiguous results under any circumstances).
> I don't understand why you call `eliminating the unspecified
> evaluation order' as `necessary'.
>> - still waiting to see someone produce a explicit code fragment which
>>   demonstrates the value of unspecified evaluation order, as many 
>> counter
>>   examples have already been produced.
> And I'm still waiting for someone to produce an explicit code fragment
> which demonstrates clear benefit to specifying an evaluation order.
> And one that demonstrates a clear benefit to *one particular*
> evaluation order over all others.
>>   If none can be produced, then maybe it's perceived merits should
>>   be reconsidered.
> Your ball.
>>   For the record:
>>    (define (first x y) x)
>>    (first (read) (read))
>>    is both a "correct" and needlessly ambiguous program under R5RS's
>>    present specification, and not easily diagnosable as being 
>> otherwise.
> It is also needlessly unambiguous under left->right evaluation as any
> of these programs more clearly demonstrate:
> (begin0 (read)
>   (read))
> (let* ((answer (read))
>        (discard (read)))
>    answer)

Posted on the users mailing list.