#### 5.5.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).

In C, the two Scheme boolean values are available as the two constants
`SCM_BOOL_T`

for `#t`

and `SCM_BOOL_F`

for `#f`

.
Care must be taken with the false value `SCM_BOOL_F`

: it is not
false when used in C conditionals. In order to test for it, use
`scm_is_false`

or `scm_is_true`

.

— Scheme Procedure:

**not**` x`
— C Function:

**scm_not** (

`x`)

Return `#t`

if `x` is `#f`

, else return `#f`

.

— Scheme Procedure:

**boolean?**` obj`
— C Function:

**scm_boolean_p** (

`obj`)

Return `#t`

if `obj` is either `#t`

or `#f`

, else
return `#f`

.

— C Macro: SCM

**SCM_BOOL_T**
The `SCM`

representation of the Scheme object `#t`

.

— C Macro: SCM

**SCM_BOOL_F**
The `SCM`

representation of the Scheme object `#f`

.

— C Function: int

**scm_is_true** (

`SCM obj`)

Return `0`

if `obj` is `#f`

, else return `1`

.

— C Function: int

**scm_is_false** (

`SCM obj`)

Return `1`

if `obj` is `#f`

, else return `0`

.

— C Function: int

**scm_is_bool** (

`SCM obj`)

Return `1`

if `obj` is either `#t`

or `#f`

, else
return `0`

.

— C Function: SCM

**scm_from_bool** (

`int val`)

Return `#f`

if `val` is `0`

, else return `#t`

.

— C Function: int

**scm_to_bool** (

`SCM val`)

Return `1`

if `val` is `SCM_BOOL_T`

, return `0`

when `val` is `SCM_BOOL_F`

, else signal a `wrong type' error.

You should probably use `scm_is_true`

instead of this function
when you just want to test a `SCM`

value for trueness.