<p>I made precisely this suggestion to Matthias a week ago!  I&#39;d love to have this.</p>
<p><blockquote>On May 6, 2009 3:31 PM, &quot;Doug Orleans&quot; &lt;<a href="mailto:dougorleans@gmail.com">dougorleans@gmail.com</a>&gt; wrote:<br><br>Scheme has a nice symmetry between arguments and return values.<br>
Procedures like make-do-sequence take advantage of this: instead of<br>
taking six arguments, it takes a thunk that returns six values, so<br>
that it can generate the six values fresh every time an iterator is<br>
created.  I&#39;m always forgetting the order of the values, though; if<br>
they were arguments, then make-do-sequence could use keyword arguments<br>
so you wouldn&#39;t have to remember the order.  But return values can&#39;t<br>
include keywords:<br>
<br>
&gt; (call-with-values (lambda () (values #:y 3 1)) (lambda (x #:y (y 2)) (list x y)))<br>
procedure application: expected a procedure that accepts keyword<br>
arguments, given #&lt;procedure:values&gt;; arguments were: 1 #:y 3<br>
<br>
Would it be feasible to allow this?  I think that would restore the<br>
symmetry between arguments and return values.<br>
<br>
--<a href="mailto:dougorleans@gmail.com">dougorleans@gmail.com</a><br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</blockquote></p>