>
>I don't know, but from the description "list of atoms," perhaps
>numbers were represented as linked lists of bits (using the facilities
>built in to support linked lists of anything).


I don't believe that any non-toy version of lisp ever used anything
as ineffecient as representing numbers as lists of bits.  In early
lisp implementations, all data are presumed to be pointers to structures.  
The address space (usually 16 or 18 bits in those days) was partitioned 
so that some range of addresses was used to represent integers, so for 
example "pointers" with values 0-255 represented integers from -128 to 127.
Real pointers all had values greater thatn 255.   Integers ouside
of the "small" range were represented by real pointers to structures
whose type and organization was determinable by inspection.

To do arithmetic, you'd first check (and hope for) the reserved range
of addresses, then interpret the data structure to retrieve the
actual values of larger integers.  Perform your arithmetic, then
reverse the process (including allocating memory to represent results
out of the small range).

With no compiler at all, as was the case in the earliest systems,
this was obviously horribly ineffecient.  As compiler technology
improved, it gradually became true that usual cases like multiplying
two integers were only 10x or so less effecient than executing on
the raw hardware.  Really good compilers can now do better than that.

.. then of course there were lisp machines, which put all the type
checking in the hardware, so ordinary arithmetic ran at full hardware
speed.   Symbolics lisp machines had 44 bit word size, which represented
32 bit integers directly.


_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to