rdp is mostly lexing tokens, but misses some identifiers; real Scheme identifiers can be
the special names "+", "-", "...", or can start with "!", "$", "%", "&", "*", "/", ":", "<",
">", "=", "?", "~", "_", or "^" and can contain letters, digits, ".", "+", or "-". Before
doing that, I removed lots of repeated code by defining a couple of preprocessor macros.