Next: , Up: Simple Data Types

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