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

(not (eq? '() #f))

The poll conducted by Chris Haynes has revealed that the status
quo is opposed by more people and supported by far fewer people
than option D (that #F is distinct from the empty list, and the
empty list counts as true in boolean contexts).  Since unanimity
cannot be achieved, option D appears to be the next best thing.
I will therefore change the R3.99RS to reflect option D by making
the changes indicated below.  These changes will make R4RS
consistent with the draft IEEE standard.

Peace, Will

section 3.2
Change: except for #f and possibly the empty list.
    To: except for #f.
Delete the two sentences that follow this one.
Change: to refer to any Scheme value that counts as true
    To: to refer to any Scheme value except #f
Change: to refer to any Scheme value that counts as false.
    To: to refer to #f.

section 3.4
Add null? to the list of predicates, and add emptylist
to the list of types.

section 6.1
Rephrase first two paragraphs as

  The standard boolean objects for true and false are
  written as #t and #f.  What really matters, though,
  are the objects that the Scheme conditional expressions
  (if, cond, and, or, do) treat as true or false.  Of all
  the standard Scheme values, only #f counts as false in
  conditional expressions.  All other standard Scheme
  values, including #t, pairs, the empty list, symbols,
  numbers, strings, vectors, and procedures, count as true.

Eliminate the rationale for allowing the empty list to
count as false.

Change the following examples as indicated:

  (not '())       ==>  #f
  (not (list))    ==>  #f
  (boolean? '())  ==>  #f

section 6.2
Change: , except that #f and the empty list are permitted
        to be identical.
    To: .

section 6.3
Remove the note that follows the description of null?

Notes: Language changes
Add: The empty list is now required to be distinct from #f
     and to count as true in conditional expressions.