#

## 3.1.2.1.2.1 Special Forms

A special form is a form with special syntax, special evaluation rules, or both, possibly manipulating the evaluation environment, control flow, or both. A special operator has access to the current lexical environment and the current dynamic environment. Each special operator defines the manner in which its subexpressions are treated---which are forms, which are special syntax, etc.

Some special operators create new lexical or dynamic environments for use during the evaluation of subforms of the special form. For example, block creates a new lexical environment that is the same as the one in force at the point of evaluation of the block form with the addition of a binding of the block name to an exit point from the block.

The set of special operator names is fixed in Common Lisp; no way is provided for the user to define a special operator. The next figure lists all of the Common Lisp symbols that have definitions as special operators.

    block      let*                  return-from
    catch      load-time-value       setq
    eval-when  locally               symbol-macrolet
    flet       macrolet              tagbody
    function   multiple-value-call   the
    go         multiple-value-prog1  throw
    if         progn                 unwind-protect
    labels     progv
    let        quote

Figure 3-2. Common Lisp Special Operators

The following X3J13 cleanup issues, not part of the specification, apply to this section:

- GENERIC-FLET-POORLY-DESIGNED:DELETE
- LOAD-TIME-EVAL:R**2-NEW-SPECIAL-FORM
- WITH-ADDED-METHODS:DELETE
- COMPILER-LET-CONFUSION:ELIMINATE

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