This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.
Source for wiki MultipleValuesCowan version 1
author
cowan
comment
ipnr
98.14.172.204
name
MultipleValuesCowan
readonly
0
text
== Multiple values macros ==
`(call-with-values `''producer'' ...` `''consumer''`)`
Invoke the ''producers'' and pass all values returned by them in order to ''consumer''. Equivalent to Common Lisp's `multiple-value-call`. See #87.
`(let-values ((`''lambda-list''` `''expression''`)` ...`) `''body''`)`
Each ''lambda-list'' should be a formal arguments list as for a `lambda` expression, cf. section 4.1.4 of the R5RS.
The ''expressions'' are evaluated in the current environment, the variables of the ''lambda-list'' are bound to fresh locations, the return values of the ''expressions'' are stored in the variables, the ''body'' is evaluated in the extended environment, and the values of the last expression of ''body'' are returned. The ''body'' is a tail body, cf. section 3.5 of the R5RS.
The matching of each ''lambda-list'' to values is done in the same way as in a `lambda` expression, and it is an error for an ''expression'' to return a number of values that does not match its corresponding ''lambda-list''.
{{{
(let-values (((a b . c) (values 1 2 3 4)))
(list a b c)) --> (1 2 (3 4))
(let ((a 'a) (b 'b) (x 'x) (y 'y))
(let-values (((a b) (values x y))
((x y) (values a b)))
(list a b x y))) --> (x y a b)
}}}
`(let*-values ((`''lambda-list''` `''expression''`)` ...`) `''body''`)`
`let*-values` is similar to `let-values`, but the bindings are performed sequentially from left to right, and the region of a binding indicated by (<formals> <expression>) is the part of the `let*-values` expression to the right of the binding. Thus the second binding is done in an environment in which the first binding is visible, and so on.
{{{
(let ((a 'a) (b 'b) (x 'x) (y 'y))
(let*-values (((a b) (values x y))
((x y) (values a b)))
(list a b x y))) --> (x y x y)
}}}
`(set!-values (`''lambda-list''`) `''expression''`)`
Assigns the values returned by ''expression'' to the variables in ''lambda-list''.
Returns undefined values. Equivalent to Common Lisp's `multiple-variable-setq`.
time
2010-10-18 11:56:33
version
1