chickadee » scheme » base » let*-values

(let*-values <mv binding spec> <body>)syntax

Syntax: <Mv binding spec> has the form ((<formals> <init>) ...), and <body> is a sequence of zero or more definitions followed by one or more expressions as described in section 4.1.4. In each <formals>, it is an error if any variable appears more than once.

Semantics: The let*-values construct is similar to let-values, but the <init>s are evaluated and bindings created sequentially from left to right, with the region of the bindings of each <formals> including the <init>s to its right as well as <body>. Thus the second <init> is evaluated in an environment in which the first set of bindings is visible and initialized, and so on.

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

}}