Brad,

While you're right that Brian's suggestion failed in the trivial case  
of (values x), I think you can write values and call-with-values in  
terms of other primitives given suitable records.

values: If values is called with one argument, return it. Otherwise,  
wrap the arguments in a "values record".

call-with-values: If the producer returns a "values record", unwrap it  
to obtain the values and call the consumer with them. Otherwise call  
the consumer with the value returned by the producer.

Of course, there is no error checking (and also no silent coercion of  
multiple values to the single value when the continuation only expects  
a single value). I've thought about adding multiple values to Stalin  
using exactly this trick.

Now, Brian said that "this feature adds nothing to Scheme's  
expressiveness". We can debate expressiveness until the cows come home  
(and leave again) and not reach a conclusion. However, I think the  
ability to implement multiple values in terms of records means that we  
can usefully debate whether they might better be accommodated in a  
library rather than the core language.

Regards,

Alan
-- 
Alan Watson
http://www.alan-watson.org/


_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to