Node:Booleans, Next:, Up:Simple Data Types



21.1 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? (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.