(cond <clause1> <clause2>)


Syntax: Each <clause> should be of the form

         (<test> <expression1> ...)

where <test> is any expression.  Alternatively, a <clause> may be of

the form

         (<test> => <expression>)

The last <clause> may be an "else clause," which has the form

         (else <expression1> <expression2> ...).

Semantics: A cond expression is evaluated by evaluating the <test>

expressions of successive <clause>s in order until one of them

evaluates to a true value (see section 6.3.1).  When a <test> evaluates

to a true value, then the remaining <expression>s in its <clause> are

evaluated in order, and the result(s) of the last <expression> in the

<clause> is(are) returned as the result(s) of the entire cond

expression.  If the selected <clause> contains only the <test> and no

<expression>s, then the value of the <test> is returned as the result.

If the selected <clause> uses the => alternate form, then the

<expression> is evaluated.  Its value must be a procedure that accepts

one argument; this procedure is then called on the value of the <test>

and the value(s) returned by this procedure is(are) returned by the

cond expression.  If all <test>s evaluate to false values, and there is

no else clause, then the result of the conditional expression is

unspecified; if there is an else clause, then its <expression>s are

evaluated, and the value(s) of the last one is(are) returned.


Returns: boolean


(cond ((> 3 2) 'greater)

      ((< 3 2) 'less))                    =>  greater


(cond ((> 3 3) 'greater)

      ((< 3 3) 'less)

      (else 'equal))                      =>  equal


(cond ((assv 'b '((a 1) (b 2))) => cadr)

      (else #f))                          =>  2

Back to index