[R6RS] Convenient syntax for multiple values
Manuel Serrano
Manuel.Serrano
Thu Dec 16 05:20:12 EST 2004
> Manuel> No, please. SRFI forces an additional round of decoding variables arguments
> Manuel> and list allocation. May I suggest a Common Lisp (and Dylan) like syntax:
>
> Manuel> (multiple-value-bind (v1 v2 v3 ..)
> Manuel> <sexp> ;; PRODUCER
> Manuel> <sexp>) ;; body
>
> Huh? Could you be more specific? I see no list allocation in the
> definitions of these macros. (Except when you use a rest list, of
> course.) Specifically, I don't see how the above would need to be
> intentionally any different from
>
> (let-values (((v1 v2 v3 ...) proceder))
> body)
>
> On Scheme 48, both expand to beta-equivalent code, for which the compiler
> then produces identical code.
I have the impression that the LET-VALUES form more or less implies
that, at some point, multiple values are represented by lists.
I dislike that.
I find pretty unpleasing that as soon as I say something there is
someone here to answer something such as "no because in my clever
implementation the form blabla is efficiently implemented as ...". I
find this very unpleasing and I feel that it is time for me to
react. I don't think that I have to be lectured on how to implement
Scheme efficiently. If you think I do, go to the shootout benchmarks
page, submit your implementation and compare it with Bigloo. Alternatively,
please send me your papers demonstrating better performance than Bigloo.
For your information, in Bigloo, the form:
(multiple-value-bind (a b c)
(foo bar)
(list a b c))
requires no allocation (except, of course, the construction of the
list). In particular, FOO does not allocate any data structure. I
think this is no so easy to get such efficiency with LET-VALUES,
especially in the context of an interpreter that cannot afford
sophisticated optimization.
--
Manuel
More information about the R6RS
mailing list