CLHS: Section 6.1.6

#

## 6.1.6 Conditional Execution Clauses

The `if`, `when`, and `unless` constructs establish conditional control in a loop. If the test passes, the succeeding loop clause is executed. If the test does not pass, the succeeding clause is skipped, and program control moves to the clause that follows the loop keyword `else`. If the test does not pass and no `else` clause is supplied, control is transferred to the clause or construct following the entire conditional clause.

If conditional clauses are nested, each `else` is paired with the closest preceding conditional clause that has no associated `else` or `end`.

In the `if` and `when` clauses, which are synonymous, the test passes if the value of form is true.

In the `unless` clause, the test passes if the value of form is false.

Clauses that follow the test expression can be grouped by using the loop keyword `and` to produce a conditional block consisting of a compound clause.

The loop keyword `it` can be used to refer to the result of the test expression in a clause. Use the loop keyword `it` in place of the form in a `return` clause or an accumulation clause that is inside a conditional execution clause. If multiple clauses are connected with `and`, the `it` construct must be in the first clause in the block.

The optional loop keyword `end` marks the end of the clause. If this keyword is not supplied, the next loop keyword marks the end. The construct `end` can be used to distinguish the scoping of compound clauses.

## 6.1.6.1 Examples of WHEN clause

The following X3J13 cleanup issue, not part of the specification, applies to this section:

- LOOP-MISCELLANEOUS-REPAIRS:FIX

Copyright 1996-2005, LispWorks Ltd. All rights reserved.