[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] "unspecified values"
Andy Wingo scripsit:
> On Sat 21 May 2011 15:57, Jim Rees <jimreesma@x> writes:
> > apparently every major implementation wraps up multiple values
> > into a single first-class object which can be passed around until
> > a call-with-values detects it and de-composes it again (please
> > correct me if I'm wrong).
> Guile does not do this. Chez does not either FWIW. Dunno about
> ikarus; I think that it also follows the approach I linked to
Chicken doesn't either: it CPS-converts everything, so that procedures
and continuations are the same thing, and returning multiple values to
a continuation is just calling a procedure with multiple arguments,
IMO a very elegant approach. The only drawback is that the compiler
can usually tell how many arguments a procedure expects, whereas a
continuation has to check at run time how many values it got, and take
corrective action if the number is wrong.
As I posted earlier, Chicken uses the "truncate two or more values
to the first value" strategy. If no values are received but one is
expected, Chicken continuations get the #<undefined> object. This is
the same one returned by standard procedures returning "an undefined
value", and is also returned by the Chicken core procedure `void`.
Deshil Holles eamus. Deshil Holles eamus. Deshil Holles eamus.
Send us, bright one, light one, Horhorn, quickening, and wombfruit. (3x)
Hoopsa, boyaboy, hoopsa! Hoopsa, boyaboy, hoopsa! Hoopsa, boyaboy, hoopsa!
--Joyce, Ulysses, "Oxen of the Sun" cowan@x
Scheme-reports mailing list