In test condition contexts like if and cond
(see section Simple Conditional Evaluation), where a group of subexpressions will be
evaluated only if a condition expression evaluates to “true”,
“true” means any value at all except #f.

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.