### 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 Booleans, 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`.