(guard (⟨variable⟩
⟨cond clause1⟩ ⟨cond clause2⟩ …)
⟨body⟩) ¶Syntax: Each ⟨cond clause⟩ is as in the specification of
cond.
Semantics: The ⟨body⟩ is evaluated with an exception handler
that binds the raised object (see Exceptions for a description of
raise) to ⟨variable⟩ and, within the scope of that binding,
evaluates the clauses as if they were the clauses of a cond
expression. That implicit cond expression is evaluated with the
continuation and dynamic environment of the guard expression. If
every ⟨cond clause⟩’s ⟨test⟩ evaluates to #f and
there is no else clause, then raise-continuable is invoked on the
raised object within the dynamic environment of the original call to
raise or raise-continuable, except that the current
exception handler is that of the guard expression.
See Exceptions for a more complete discussion of exceptions.
(guard (condition ((assq 'a condition) => cdr) ((assq 'b condition))) (raise (list (cons 'a 42)))) ⇒ 42
(guard (condition ((assq 'a condition) => cdr) ((assq 'b condition))) (raise (list (cons 'b 23)))) ⇒ (b . 23)