From: Joe Konstan
Subject: Summary of responses on equality of uninterned symbols
Date: 
Message-ID: <1992Nov25.205347.7282@news2.cis.umn.edu>
The short form is that I misunderstood CLtL2 and how uninterned symbols work.
Each creation of an uninterned symbol, regardless of name, is unique.  So,
even (equal #:FOO #:FOO) will evaluate to nil.  A longer form follows for 
those that didn't already consider this obvious.

Side note:  Amazingly, I received several replies before my own local host
showed my posting.  Thanks to all of you.

Long form:

Packages are the only "dictionaries" of symbol names in Common Lisp.  If a 
symbol is in a package (interned) then the reader can look it up and 
return a pointer to it.  If it is not interned, but not explicitly uninterned,
the reader will create the symbol and intern it.  

With uninterned symbols, there is no dictionary at all.  While symbols
can be created with gensym, make-symbol, copy-symbol, or the form #:SYMBOL 
being read, each invocation makes an entirely new copy.  Accordingly, even
though the print names are identical, the symbols are separate.  As a side
effect, the printed form cannot be re-read to recreate the same entity.

As for my confusion, I guess it came from CLtL pg. 244 where the text
describes how the reader automatically makes interned symbols but then says
that uninterned symbols print as #:---- but are created with a set of
functions that follow.  I misread an implication that the reader didn't create
uninterned symbols, which in retrospect is clearly wrong.

(It might be a good idea to clarify this in CLtL3, whenever that comes along.)

Joe Konstan
·······@cs.umn.edu