Revised(5) Report on the Algorithmic Language Scheme - Disjointness of types

## 3.2 Disjointness of types

No object satisfies more than one of the following predicates:

      boolean?          pair?
      symbol?           number?
      char?             string?
      vector?           port?
      procedure?

These predicates define the types boolean, pair, symbol, number, char (or character), string, vector, port, and procedure. The empty list is a special object of its own type; it satisfies none of the above predicates.

Although there is a separate boolean type, any Scheme value can be used as a boolean value for the purpose of a conditional test. As explained in section 6.3.1, all values count as true in such a test except for #f. This report uses the word "true" to refer to any Scheme value except #f, and the word "false" to refer to #f.