#### 2.12.1 cond-expand (SRFI 0) ¶

SRFI 0 is a mechanism for portably determining the availability of SRFI features. The `cond-expand` special form conditionally expands according to the features available.

standard special form: cond-expand clause clause dots ¶

  Each clause has the form

      (feature-requirement expression ...)

  where feature-requirement can have one of the following forms:

      feature-identifier
      (and feature-requirement ...)
      (or feature-requirement ...)
      (not feature-requirement)
      else

  (Note that at most one `else` clause may be present, and it must always be the last clause.)

  The `cond-expand` special form tests for the existence of features at macro-expansion time. It either expands into the body of one of its clauses or signals an error during syntactic processing. `cond-expand` expands into the body of the first clause whose feature-requirement is currently satisfied (an `else` clause, if present, is selected if none of the previous clauses is selected).

  A feature-requirement has an obvious interpretation as a logical formula, where the feature-identifier variables have meaning true if the feature corresponding to the feature-identifier, as specified in the SRFI registry, is in effect at the location of the `cond-expand` form, and false otherwise. A feature-requirement is satisfied if its formula is true under this interpretation.

      (cond-expand
        ((and srfi-1 srfi-10)
         (write 1))
        ((or srfi-1 srfi-10)
         (write 2))
        (else))

      (cond-expand
        (command-line
         (define (program-name) (car (argv)))))

  The second example assumes that `command-line` is an alias for some feature which gives access to command line arguments. Note that an error will be signaled at macro-expansion time if this feature is not present.

  Note that MIT/GNU Scheme allows `cond-expand` in any context where a special form is allowed. This is an extension of the semantics defined by SRFI 0, which only allows `cond-expand` at top level.