This page is part of the web mail archives of SRFI 11 from before July 7th, 2015. The new archives for SRFI 11 contain all messages, not just those from before July 7th, 2015.
>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