Conditionals

An if expression is evaluated as follows:
first, test-expression is
evaluated. If it yields a true value, then consequent is
evaluated and its values are returned. Otherwise alternate is
evaluated and its values are returned. If test yields #f
and no alternate is specified, then the result of the expression
is unspecified.

A cond expression is evaluated by evaluating the test-expressions
of successive cond-clauses in order until one of them
evaluates to a true value. When a test-expression evaluates to a true
value, then the remaining expressions in its cond-clause
are evaluated in order, and the results of the last expression in
the cond-clause are returned as the results of the entire
cond expression.
If the selected cond-clause contains only the test-expression and no
expressions, then the value of the test-expression is returned as the
result. If the selected cond-clause uses the => alternate
form, then the expression is evaluated. Its value must be a
procedure. This procedure should accept one argument; it is called on
the value of the test-expression and the values returned by this procedure
are returned by the cond expression.

If all test-expressions evaluate to #f, and there is no else
clause, then the conditional expression returns unspecified values; if
there is an else clause, then its expressions are
evaluated, and the values of the last one are returned.

Each datum is an external representation of some object.
Each datum in the entire case expression should be distinct.

A case expression is evaluated as follows.

The case-key is evaluated and its result is compared using
eqv? against the data represented by the datums of
each case-clause in turn, proceeding in order from left to
right through the set of clauses.

If the result of evaluating case-key is equivalent to a datum of a
case-clause, the corresponding expressions are evaluated
from left to right and the results of the last expression in the
case-clause are returned as the results of the case
expression. Otherwise, the comparison process continues.

If the result of evaluating key is different from every datum in
each set, then if there is an case-else-clause its expressions are
evaluated and the results of the last are the results of the case
expression; otherwise the result of case expression is unspecified.

If the selected case-clause or case-else-clause
uses the => alternate
form, then the expression is evaluated. It is an error if
its value is not a procedure accepting one argument. This
procedure is then called on the value of the key and the
values returned by this procedure are returned by the case
expression.

If there are no test-expressions, #t is returned. Otherwise, the
test-expression are evaluated from left to right until a
test-expression returns #f or the last test-expression is reached. In the
former case, the and expression returns #f without
evaluating the remaining expressions. In the latter case, the last
expression is evaluated and its values are returned.

If there are no test-expressions, #f is returned. Otherwise, the
test-expressions are evaluated from left to right until a
test-expression returns a true value val or the last
test-expression is
reached. In the former case, the or expression returns val
without evaluating the remaining expressions. In the latter case, the
last expression is evaluated and its values are returned.