Re: [srfi-11] LET-VALUES wrapup (was: Re: Another vote for more parens) Lars Thomas Hansen 10 Jan 2000 20:20 UTC

>Okay, here's a summary of the proposal I see coming down the bend
>(note that I don't like it, I'm just summarizing it *smile*)...
>
>Syntax:
>
>  EXP ::= (let-values (DECL ...) BODY)
>        | (let*-values (DECL ...) BODY) ;; or let-values*?
>
>  DECL ::= (IDENTIFIER EXP)
>         | (FORMALS* EXP)
>
>  FORMALS* ::= everything that the <formals> nonterminal from R5RS
>               7.1.3 can be, _except_ for just an <identifier>.
>
>Semantics (for just one decl, because I'm lazy)
>
>  (let-values ((IDENTIFIER EXP)) BODY)
>  ==> (let ((IDENTIFIER EXP)) BODY)
>         or, equivalently
>      (call-with-values (lambda () EXP) (lambda (IDENTIFIER) BODY))

Holy cow, absolutely not!

	(let-values ((I E)) BODY)
	==>  (call-with-values (lambda () E) (lambda I BODY))

There is only one case: any <formals> is allowable, and does exactly
what you would expect.  I thought I was clear about this but I guess I
must not have been.  The proposed expansion above is in any case not
allowed by the Report.

There is nothing profound about my spec for LET-VALUES.  It is merely
sugar that aims to improve readability of programs (by removing the use
of CPS introduced by CALL-WITH-VALUES).  Among other things I want to be
able to capture all the returned values in a list.  Mike (and maybe
Dave, I can't tell) wants to perserve the equivalence of (values 1) and
1 when destructuring; I don't mind that, but it competes with the
ability to capture all values, which I value much more highly.

--lars