Next: , Previous: receive (SRFI 8), Up: SRFI syntax



2.12.3 and-let* (SRFI 2)

SRFI 2 provides a form that combines and and let* for a logically short-circuiting sequential binding operator.

— special form: and-let* (clause ...) body

Runs through each of the clauses left-to-right, short-circuiting like and in that the first false clause will result in the whole and-let* form returning false. If a body is supplied, and all of the clauses evaluate true, then the body is evaluated sequentially as if in a begin form, and the value of the and-let* expression is the value of the last body form, evaluated in a tail position with respect to the and-let* expression. If no body is supplied, the value of the last clause, also evaluated in a tail position with respect to the and-let* expression, is used instead.

Each clause should have one of the following forms:

identifier
in which case identifier's value is tested.
(expression)
in which case the value of expression is tested.
(identifier expression)
in which case expression is evaluated, and, if its value is not false, identifier is bound to that value for the remainder of the clauses and the optional body.

Example:

     (and-let* ((list (compute-list))
                ((pair? list))
                (item (car list))
                ((integer? item)))
       (sqrt item))