[R6RS] multiple-value binding
Anton van Straaten
anton at appsolutions.com
Thu Mar 2 02:25:24 EST 2006
> Well, these are short but don't fix the *-placement problem. let/v*
> has the same problem as let-values* in that the * isn't really in the
> right place
My thought was that the * in let/v* is a bit closer to where it should
be. Some squinting may be required...
>>I have a question about the overall rationale here: with an alternate
>>form like mvlet, which is designed to support both single and multiple
>>values well, should the original LET end up being deprecated (except for
>>the named let form)? After all, mvlet will have the same syntax as LET,
>>for single values. Alternatively, should they be considered coequal,
>>intended to support two different programming styles? While we may not
>>get to decide what happens in practice, we may want to explain what is
>>intended.
>
>
> The syntax is not the same for single values. To bind a single value
> with mvlet, you need to wrap the variable in parens, like this:
>
> (mvlet ([(x) e]) ---)
That doesn't match my understanding of the syntax given for option 4:
(let ([idspec expr] ...) body)
idspec -> id | vidspec
vidspec -> (values . id) | (values id ...) | (values id id ... . id)
This gives:
(let ([idspec expr] ...) body)
and one of the cases for 'idspec' is 'id', which gives:
(let ([id expr] ...) body)
which I thought was the syntax for binding a single value.
That was what I was voting for, because it avoids "extra" parens in the
single-value case, while being fully general for multiple values.
> I would not want to deprecate let in any case because of its simplicity
> and close relationship with lambda. In fact, I'd like to see let in
> the core language and mvlet in a library.
That answers my question, thanks.
Anton
More information about the R6RS
mailing list