Node:Booleans, Next:Numbers, Up:Simple Data Types
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?
(see Equality) and numerical and string comparison operators like
string=? (see String Comparison) and <=
(see Comparison).
(<= 3 8) => #t (<= 3 -3) => #f (equal? "house" "houses") => #f (eq? #f #f) => #t
In test condition contexts like if and cond (see if cond case), 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:
| not x | Scheme Procedure |
| scm_not (x) | C Function |
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.
| boolean? obj | Scheme Procedure |
| scm_boolean_p (obj) | C Function |
Return #t iff obj is either #t or #f.
|