Recursion and Induction: Symbols

Unlike many languages, Lisp provides symbols as primitive data objects. Some
example symbols are `t`, `nil`, `LOAD`, `STORE`,
`ICONST_0`, `prime-factors`, `++`, and `file77`. For the
purposes of this document, we will treat symbols as atomic objects, though it
is actually possible to construct and deconstruct them in terms of strings.

For the purposes of this document, a symbol is a sequence of alphabetic
characters, digits, and/or certain signs (specifically, `+`, `-`,
`*`, `/`, `=`, `<`, `>`, `?`, `!`, `$`,
`&`, and `_` (underscore)) that cannot be read as a number. Case
is unimportant. Symbols are parsed to have the greatest length possible
under the rules above. Thus, `xy` is one symbol, not two symbols (`x`
and `y`) written without intervening whitespace!

Note that `t` and `T` are different ways to write the same symbol, as
are `nil`, `Nil`, and `NIL`. `T` and `nil` are called
the *Boolean symbols*. `T` is frequently used to denote *true*
and `nil` is used to denote *false*. For reasons that will become
apparent, `nil` is also used as the *empty list*.

(Maybe explore <<symbols>>?)

Next: