Top-level variables are bound with the standard Scheme
define form. Multiple values are bound to multiple
variables at once with define-values:
(define-values (variable ) expr)
The number of values returned by expr must match the number of
variables provided.
All of the variables are bound sequentially after expr is evaluated. If an error occurs while binding one of the definitions (perhaps because the variable is a constant that is already defined), then the definitions for the preceding variables will have already completed, but definitions for the remaining variables will never complete.
Examples:
(define x 1)
x ; => 1
(define-values (x) 2)
x ; => 2
(define-values (x y) (values 3 4))
x ; => 3
y ; => 4
(define-values (x y) (values 5 (add1 x)))
y ; => 4
(define-values () (values)) ; same as (void)
(define x (values 7 8)) ; => exn:application:arity, 2 values for 1-value context
(define-values (x y) 7) ; => exn:application:arity, 1 value for 2-value context
(define-values () 7) ; => exn:application:arity, 1 value for 0-value context