Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!hplabs!otter.hpl.hp.com!otter!sfk From: sfk@otter.hpl.hp.com (Steve Knight) Newsgroups: comp.lang.lisp Subject: Re: FALSE vs empty list Message-ID: <1350029@otter.hpl.hp.com> Date: 6 Sep 90 15:41:42 GMT References: <24305@uflorida.cis.ufl.EDU> Organization: Hewlett-Packard Laboratories, Bristol, UK. Lines: 31 Ahhh, the old arguments are the best arguments .... The type-distinctness of empty-list and false in a Lisp or Lisp-like language is an aesthetic consideration. Many folks, and I'd include myself, believe that making them distinct is more convenient and makes programs more readable. Ultimately, our arguments must boil down to "I don't think of an empty list and false in the same way. I don't think that applying boolean operators to lists makes good programming practice." and so on. These are preferences that cannot be grounded logically. You might argue that making them distinct or the same confers some special advantage. Review of debates shows that any advantages or disadvantages are less than uniformly persuasive. A lot of folks go away unconvinced that enough benefit/penalty has been shown to change their views. If you are happy applying boolean operators to lists and list operators to booleans, then you will have little inclination to change. You may even enjoy the conciseness of idioms such as (car (or (member x L1) (member x L2) '(()))) which exploit the conflation of lists and booleans. On the other hand, you may be inclined to wonder why only lists and booleans should enjoy the benefits of conflation. For example, we could map 0 and NIL onto one another & perhaps 1 onto TRUE. No, they are kept distinct because it is generally felt to be more comfortable that way. Distinct concepts are typically given distinct, non-overlapping data-types. It's not a big deal. It's just one of those many features that makes Lisp feel a bit dated. Steve