[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

multiple values



I have avoided the mv debate, perhaps hoping nothing would come of it.
I worry whether mvs can be added to Scheme at this point without
"scabbing" them on (a carpenter's idiom, with obvious implications).
But John refuses to give up, and I sense the opposition is weakening.
So I enter at this late stage with a plea to "do it right."

I agree with Will's arguments for a semantics in which
                  e == (values e)
I also think we must be bold and call it an error whenever more or less than
one value is returned to a single-valued continuation.  Otherwise, given the
wording of John's latest version, we are back precisely where Kent wanted us
all along!

   From ramsdell@linus.mitre.org  Mon Aug 28 06:45:56 1989

                                                         ...The essence 
   of the compromise is that we leave unspecified the effect of returning 
   zero values or more than one value to something other than a receiving 
   procedure.  This means implementations may or may not signal an error 
   in this case, and both kinds of implementations are considered equally 
   correct...  
                                                              ...It is an
   error if 'receiver' cannot be applied to the number of values returned
   by 'generator'...

This means, for instance, that
         (with-values (lambda () (values 1 'a)) symbol?)
is an error, whereas
         (symbol? (values 1 'a))
may be perfectly valid in some implementations (and for that matter,
may return #t).

As I understand it, the substance of Kent's argument all along was that
continuations produced by "with-values" should be distinct
from ordinary continuations, and "values" should be thought of as the
means of interacting with such continuations.  On the other hand, the
opposition, with whom I thought myself allied, was arguing that continuations
produced by "with-values" differed only in arity from ordinary continuations.
It seems we are back to two kinds of continuations again.

Am I missing something?

Bob