Booleans
========
The two boolean values are `#t' for true and `#f' for false.
Boolean values are returned by predicate procedures, such as the general
equality predicates `eq?', `eqv?' and `equal?' (Note:Equality) and
numerical and string comparison operators like `string=?' (REFFIXME)
and `<=' (REFFIXME).
(<= 3 8)
=>
#t
(<= 3 -3)
=>
#f
(equal? "house" "houses")
=>
#f
(eq? #f #f)
=>
#t
In test condition contexts like `if' (REFFIXME) and `cond' (REFFIXME),
where a group of subexpressions will be evaluated only if a CONDITION
expression evaluates to "true", "true" means any value at all except
`#f'.
(if #t "yes" "no")
=>
"yes"
(if 0 "yes" "no")
=>
"yes"
(if #f "yes" "no")
=>
"no"
A result of this asymmetry is that typical Scheme source code more often
uses `#f' explicitly than `#t': `#f' is necessary to represent an `if'
or `cond' false value, whereas `#t' is not necessary to represent an
`if' or `cond' true value.
It is important to note that `#f' is *not* equivalent to any other
Scheme value. In particular, `#f' is not the same as the number 0
(like in C and C++), and not the same as the "empty list" (like in some
Lisp dialects).
The `not' procedure returns the boolean inverse of its argument:
- primitive: not x
Return `#t' iff X is `#f', else return `#f'.
The `boolean?' procedure is a predicate that returns `#t' if its
argument is one of the boolean values, otherwise `#f'.
- primitive: boolean? obj
Return `#t' iff OBJ is either `#t' or `#f'.