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

(atom? '()) => #t

This one just burnt me, *badly*.

Can someone explain the rationale behind treating '() as an atom?  It
seems to me that it should be a pair:  it's the empty *list* not the
empty *atom*.

Given this defn of a cons node:

struct C_node {
	struct CONS_NODE *car;
	struct CONS_NODE *cdr;
} ;

struct CONS_NODE {
	int type;

	union {
		struct C_node cdata;
		int idata;
		double fdata;
	} data;
} ;

#define CC	1 /* car is a PAIR, cdr is a pair */
#define CA	2 /* car is a PAIR, cdr is an atom */
#define AC	3 /* car is an ATOM, cdr is PAIR */
#define AA	4 /* car is an ATOM, cdr is an ATOM */
#define INT	5
#define	FLOAT	6 ...etc...

(note: the C means CONS, probably should be a P for PAIR)

seem to me, that the list (a b c) should be this:

   AC -> AC -> AC -> NIL
   a     b     c

but since '() is an atom, it is in actuality this:

   AC -> AC -> A A
   a     b     c NIL
Jason Coughlin ( jk0@sun.soe.clarkson.edu , jk0@clutx )
"Every jumbled pile of person has a thinking part that wonders what the
part that isn't thinking isn't thinking of." - They Might Be Giants