9.1 Multiple Values
See Multiple Return Values for general information about multiple result values. In addition to call-with-values (described in this section), the let-values, let*-values, letrec-values, and define-values forms (among others) create continuations that receive multiple values.
v : any/c  | 
Returns the given vs. That is, values returns as provided arguments.
Examples:  | 
> (values 1)  | 
1  | 
> (values 1 2 3)  | 
1  | 
2  | 
3  | 
> (values)  | 
(call-with-values generator receiver) → any  | 
receiver : procedure?  | 
Calls generator, and passes the values that generator produces as arguments to receiver. Thus, call-with-values creates a continuation that accepts any number of values that receiver can accept. The receiver procedure is called in tail position with respect to the call-with-values call.
Examples:  | 
> (call-with-values (lambda () (values 1 2)) +)  | 
3  | 
> (call-with-values (lambda () 1) (lambda (x y) (+ x y)))  | 
#<procedure>: expects 2 arguments, given 1: 1  |