For Gauche 0.9.5

Next: , Previous: , Up: Library modules - SRFIs   [Contents][Index]

### 11.5 `srfi-11` - Let-values

Module: srfi-11

Defines two macros, `let-values` and `let*-values`. They are convenient to use with multiple values ([SRFI-11]).

Macro: let-values ((vars expr) …) body …

[SRFI-11] vars are a list of variables. expr is evaluated, and its first return value is bound to the first variable in vars, its second return value to the second variable, and so on, then body is evaluated. The scope of exprs are the outside of `let-values` form, like `let`.

```(let-values (((a b) (values 1 2))
((c d) (values 3 4)))
(list a b c d)) ⇒ (1 2 3 4)

(let ((a 1) (b 2) (c 3) (d 4))
(let-values (((a b) (values c d))
((c d) (values a b)))
(list a b c d))) ⇒ (3 4 1 2)
```

vars can be a dotted list or a single symbol, like the lambda parameters.

```(let-values (((x . y) (values 1 2 3 4)))
y) ⇒ (2 3 4)

(let-values ((x (values 1 2 3 4)))
x) ⇒ (1 2 3 4)
```

If the number of values returned by expr doesn’t match what vars expects, an error is signaled.

Macro: let*-values ((vars expr) …) body …

[SRFI-11] Same as `let-values`, but each expr’s scope includes the preceding vars.

```(let ((a 1) (b 2) (c 3) (d 4))
(let*-values (((a b) (values c d))
((c d) (values a b)))
(list a b c d))) ⇒ (3 4 3 4)
```

Next: , Previous: , Up: Library modules - SRFIs   [Contents][Index]