values produces multiple return values. It can only be used in a binding or returning position.

values is also a pattern in let

Syntax

;; produce multiple values
(values expr ...)

;; destructure multiple values into variable bindings
(let (values var...) = expr)

;; or
(let (((values var...) expr)
      ...)
  ...)

Semantics

  • The number and types of returned values must match the surrounding expected type.
  • Multiple values can be destructured with let (values ...) = ....

Example

(define (sum-and-product x y)
  (values (+ x y) (* x y)))