[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NIHIL EX NIHIL - DON'T SETQ NIL



The RRRS says that the value of the (non-essential) variable NIL should
be the empty list.  But I claim that this is not in accordance with
practice, and is ugly besides.  My evidence:

1. S&ICP - NIL is used in both ways in the book, but is introduced on
page 17 as being false, and not until page 91 as the empty list.  Just
leafing through the book I found many places where nil was used for
false and no places where it was used as empty list.

2. The Art of The Interpreter - I think Steele started using NIL as
false and '() as empty list about the time this paper came out.

3. T - liking Steele's convention, we used it in T source and
documentation starting in 1981 (and I was using it in my Maclisp code
even before that), so it's pretty deeply wired into T "culture" that NIL
is false and NOT the empty list.  When The T implementation starts
distinguishing () from #!false, as I hope it will soon, the sources, and
user's code, won't have to change, because this practice has been
followed religiously.

4. Having T and NIL as names for true and false is symmetrical with
having #!true and #!false, especially once #!null goes away (which no
one has complained about, so it will).  The manual looks very peculiar
the way it is because T and NIL are described together but have
apparently unrelated purposes.

So unless I hear from someone who has more than about 3 megabytes of
source code making the opposite assumption (that was supposed to be
funny - other arguments will be entertained of course), I'll change the
RRRS to describe NIL as being false, not empty list.

Jonathan