Previous: srfi let-values rationale, Up: srfi let-values [Index]

- Syntax:
**let-values***((*`formals``expression`) ...)`body` Each

`formals`should be a formal arguments list as for a`lambda`

expression (cf section 4.1.4 of the R5RS).The

`expression`s are evaluated in the current environment, the variables of the`formals`are bound to fresh locations, the return values of the`expression`s 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

`formals`to values is as for the matching of`formals`to arguments in a`lambda`

expression, and it is an error for an`expression`to return a number of values that does not match its corresponding`formals`.Examples:

(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)

- Syntax:
**let*-values***((*`formals``expression`) ...)`body` Each

`formals`should be a formal arguments list as for a`lambda`

expression (cf section 4.1.4 of the R5RS).`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 that 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.Example:

(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)

Previous: srfi let-values rationale, Up: srfi let-values [Index]