Subject: Re: When did FIRST/REST come into the language?
From: rpw3@rpw3.org (Rob Warnock)
Date: Tue, 25 Mar 2003 12:29:49 -0600
Newsgroups: comp.lang.lisp
Message-ID: <ORmcnWuzJeeAPR2jXTWc-g@speakeasy.net>
Christopher C. Stacy <cstacy@dtpq.com> wrote:
+---------------
| MDL called symbols "ATOM"s.  You could associate a value with
| an ATOM by means of the SET function.  But EVAL of an atom just
| returns the atom.  To get the value, you needed to call the special
| form LVAL ("local value").  The reader macro for LVAL is "."
| so to get the value of FOO, you would write:
|   .FOO
+---------------

Hey, shades of BLISS!  ;-}  ;-}

In BLISS, names meant the same thing everywhere (no "L-value"/"R-value"
distinction), and variable names were bound to machine addresses (well,
actually, byte pointers, but the default pointer was to a full word),
with "." as the "contents of" operator. So "x := x + 1" stored the
*address* of the word following "x" into "x" (which in C would be
"x = &x + 1", I suppose), while "x := .x + 1" incremented "x" using
integer arithmetic. (And "x := .x fadr 1.0" incremented "x" using
floating-point arithmetic!)


-Rob

p.s. For readability, I used ":=" as assignment above, but BLISS actually
used the old Teletype (ASCII-1963) back-arrow, which when ASCII morphed
into ANSCII a.k.a. USASCII (ASCII-1965 and later) became the underscore,
making all that old BLISS code look decidedly weird!! E.g.: "X_.X+1" or
"X_Y_Z_-2" (that is, in C, "x = y = z = -2;").

-----
Rob Warnock, PP-ASEL-IA		<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607