Email list hosting service & mailing list manager


(no subject) Prfnoff 05 Feb 2000 18:29 UTC

>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.

In addition, taking as example the 'floor' function of Common Lisp:
(floor 5/3) -> 1, 2/3
(values (floor 5/3)) -> 1

So "(values x) = x" does not appear to be an identity. Therefore, I
accept Lars' syntax with multiple bindings allowed, as allowing the single
binding case only is redundant with SRFI-8.

P.S. Regarding LET-type forms, I think SRFI-5 erred in having the rest
argument not bindable to a single list. The example's first line, under my
interpretation, would be:
(let (blast (port (current-output-port)) . (x (list (+ 1 2) 4 5)))