DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH

# (guile.info.gz) Booleans

Info Catalog (guile.info.gz) Simple Data Types (guile.info.gz) Numbers
```
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
Equality::) and numerical and string comparison operators like
`string=?' ( String Comparison) and `<=' ( Comparison).

(<= 3 8)
=>
#t

(<= 3 -3)
=>
#f

(equal? "house" "houses")
=>
#f

(eq? #f #f)
=>
#t

In test condition contexts like `if' and `cond' ( 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:

-- Scheme Procedure: not x
-- C Function: scm_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'.

-- Scheme Procedure: boolean? obj
-- C Function: scm_boolean_p (obj)
Return `#t' iff OBJ is either `#t' or `#f'.

```
Info Catalog (guile.info.gz) Simple Data Types (guile.info.gz) Numbers
automatically generated byinfo2html