I just came across the 1960 "Lisp 1 Programmer's Manual", which I'd never seen before: http://history.siam.org/sup/Fox_1960_LISP.pdf As this manual clearly describes, both integers and floats had _property lists_ and were _uniquized_. Q: When did Lisp numbers lose their property lists ? Q: Did any other Lisps keep property lists for numbers ? Q: Were Lisp property lists ever used for interesting things: e.g., storing primality, factors, etc. ? Q: Also, who is "K. Maling", who is credited with writing the Lisp 1 READ function ? --- My notes from the above manual: Note that in the original Lisp 1, _integers had property lists_ !!! This must have required that integers be INTERN'ed, although the Lisp 1 manual doesn't mention INTERN or OBLIST at all (INTERN/OBLIST apparently arrived with Lisp 1.5). "On the association lists for integers the indicator INT points to the integral value. The integral value is given as a full machine word with the value pushed to the right-hand end of the register." In Lisp 1, _floating point numbers had property lists_ !!! "Floating-point numbers are listed in a separate list. A floating-point number is put on this list either as it is read in or _as it is generated within a calculation_. _Neither this list nor the list of atomic symbols has any duplications._ An association list is created for a floating-point number when the number is put on the list of numbers." "Only _positive_ numerical values are put on the association lists for floating-point numbers; if a number is negative the association list for the number is preceded by the indicator MINUS, and the entry in the list of floating-point numbers points to the MINUS indicator." The representations of the integers +1.0 and -1.0 are given on page 92. In modern notation, the property list of +1.0 is '(NUMB FLO (1.0)), and -1.0 is the list '(MINUS +1.0). Floating point numbers only acquired a 'PNAME' (print name) when they were first printed out. Apparently, only positive floats existed as atoms; negative floats were the list `(MINUS ,num). The representation of the integer 1 is given on page 94 of the Lisp 1 manual. In modern notation, the property list of +1 is '(PNAME ("1") INT 1 APVAL (1)). --- Interesting _builtin_ capabilities for 1960 Lisp 1: gensym() !! It isn't mentioned, but I presume that these symbols were uniquized. compab(x,y,z) = |x-y|<z, where x,y,z are all floats. diff(y,x) "The function diff differentiates the algebraic expression y with respect to x. ... Gradients must be provided on the association lists of all the functions used in the expression y, except for PLUS and TIMES." matrixmultiply(x,y). In modern notation, x = '(matrix (row a11 a12 a13) (row a21 a22 a23) (row a31 a32 a33)) y = '(matrix (col b11 b21 b31) (col b12 b22 b32) (col b13 b23 b33)) Curiously, there wasn't a builtin transpose operation. Even modern Common Lisp, with all of its other bloat, doesn't have matrix multiplication built in!