3 ms·
If NIL were a CONS, how would you distinguish between an empty list and a list of length one containing NIL?
by Chinjut 4y ago
If NIL were a CONS, how would you distinguish between an empty list and a list of length one containing NIL?
- lisper 4y agoThe same way you do now: (NIL) would not answer true to NULL. And it would not be EQ to NIL.
- Chinjut 4y agoIf NIL were a CONS whose CAR is NIL and whose CDR is NIL, wouldn't NIL be the same as (CONS NIL NIL) = (NIL . NIL) = '(NIL)?
- lisper 4y agoIt depends on what you mean by "the same". It is already "the same" in the sense that the CAR and CDR of both NIL and (NIL) are all NIL. They just aren't EQUAL, despite the fact that their CARs and CDRs are EQUAL (in fact, they are all EQ).
- tmtvl 4y agoTechnically not, because a cons of two objects is not eq to another cons of the same two objects. (eq (cons 1 2) (cons 1 2)) ;; => nil It's memory locations, after all.
- Chinjut 4y agoI see, fair enough. I forgot to switch out of pure functional programming/referential transparency mode for this discussion. Fine, you can take NIL to be one particular (NIL . NIL) that's different from all other (NIL . NIL)s, the only particular (NIL . NIL) that is considered a list of length 0 while all other (NIL . NIL)s are lists of length 1.