Paul Wallich <firstname.lastname@example.org> wrote:
| neo88 wrote:
| > And just to clarify, numbers and characters do NOT work like pointers?
| Numbers and characters don't work like pointers in the sense that
| they're not (generally) unique objects, so you can't do the shorthand
| of asking whether two of them are equal to another by seeing if they
| point to the same place (the EQ test).
But on the other hand, you can never be sure that they *aren't* pointers,
either. Both bignums (anything bigger than MOST-POSITIVE-FIXNUM) and
"fat" characters (if your implementation supports them) might very well
When explaining this to newcomers, I find it easier to simply say that
in Lisp *everything* is a pointer, except that the implementation
is allowed to optimize the representation of some objects by encoding
them as "funny" or "immediate" pointers.
 The original SIOD implementation of R3RS Scheme (later used in
The GIMP as an extension language) represented *all* numbers
as heap-allocated C "doubles", but lessened the strain on the
allocator by consing a small range of whole numbers (typically
-100.0 through 1000.0) at startup time. Numeric functions did
a quick range check on their results and returned one of the
preallocated numbers if possible.
 Though this really bothers some purists [search Google Groups for
"everything is a pointer"] who would prefer to say "everything is
an object" and then mumble something about usually never needing
to know whether the representation of an object is a pointer to
a hunk of heap or an immediate pointer-like cookie (or even an
unboxed native machine type).
Rob Warnock <email@example.com>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607