Such an improvement would be very welcome (I don&#39;t like to have to split my lets because of one expression returning multiple values), and I vote for #2 (using square brackets makes it sufficiently readable IMO), unless someone spoils it all with an overseen big drawback... But I would be quite happy with &quot;((values ID ...+) VAL-EXPR)&quot; or even &quot;(values (ID ...+) VAL-EXPR)&quot; (although this one looks weird to me).<br>

<br>Laurent<br><br><div class="gmail_quote">On Sun, Jun 3, 2012 at 8:40 PM, Neil Van Dyke <span dir="ltr">&lt;<a href="mailto:neil@neilvandyke.org" target="_blank">neil@neilvandyke.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

What do people think about this syntax addition for multiple values in &quot;let&quot; and &quot;let*&quot; (and perhaps &quot;letrec&quot;)?<br>
<br>
I like using multiple-value returns, but two problems with using them with the &quot;let&quot;* family:<br>
<br>
1. &quot;let-values&quot; and &quot;let*-values&quot; are long identifiers, and increase rightward drift, sometimes making the difference between a line break needed before right-hand-side (RHS) or not (which line break is ugly in a &quot;let&quot;* form).<br>


<br>
2. If I have an existing &quot;let&quot;* that&#39;s not a *&quot;-values&quot; that already has a few clauses in it, and I want to add a multiple-value LHS to it, I have to go to the trouble of converting it to a &quot;-values&quot;, which requires editing each clause to add parentheses.<br>


<br>
So, I&#39;ve been wondering what would be a good way to support multiple values on a per-clause basis.  Options I see:<br>
<br>
1. Change &quot;(ID VAL-EXPR)&quot; to &quot;(ID ...+ VAL-EXPR)&quot;.  I am shying away from this one because it seems error-prone, and the standard indenter won&#39;t know a good way to break such a clause across multiple lines, but it does have some appeal.<br>


<br>
2. In addition to &quot;(ID VAL-EXPR)&quot;, have &quot;((ID ...+) VAL-EXPR)&quot;.  This could work.  One drawback I see is if in the future someone wants to have some funky generalized-&quot;set!&quot; selectors that have a parenthesized form, and have those work with the &quot;let&quot;* forms.  I&#39;m not currently interested in such &quot;set!&quot; selectors.  Another small drawback is that we&#39;ll sometimes see &quot;(let (((ID&quot; three parentheses sometimes, like we do with &quot;let-values&quot;, which is not the most visually pleasant thing to see.<br>


<br>
3. In addition to &quot;(ID VAL-EXPR)&quot;, have &quot;((values ID ...+) VAL-EXPR)&quot;.  This avoids the hypothetical problem with some future &quot;set!&quot; selectors, since I doubt is going to use &quot;values&quot; for the name of such a selector with any other purpose.  This still has the three-parentheses problem like option #2.<br>


<br>
4. In addition to &quot;(ID VAL-EXPR)&quot;, have &quot;(values ID ...+ VAL-EXPR)&quot; or &quot;(values (ID ...+) VAL-EXPR)&quot;.  This avoids the three-parens of #2 and #3, it&#39;s not ambiguous with &quot;values&quot; used as a variable name, but it doesn&#39;t seem very Scheme-y, it has similar indent problem to option #1, and we still have rightward drift because of the &quot;values&quot; keyword.<br>


<br>
I lean a little towards option #2, but I think #1 or #3 would still be an improvement.  #4 seems less-Schemely syntax, so I am reluctant to go there.<br>
<br>
For each option, the transform to Racket&#39;s canonical &quot;let-values&quot; is  trivial.<br>
<br>
I don&#39;t know whether there are implications for TR syntax.<br>
<br>
A separate question -- which I don&#39;t care about, but someone else might -- is whether there should be ``rest&#39;&#39; ID in the LHS that gets a list of any remaining values from the RHS.  I think this came up in a SRFI discussion a long time ago.  I almost never have occasion to use such a feature, and it could complicate the syntax and the Racket compiler, so I&#39;m not interested in a ``rest&#39;&#39; in the LHS.<br>


<br>
Neil V.<br>
<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</blockquote></div><br>