6.6.1 Booleans

The two boolean values are #t for true and #f for false. They can also be written as #true and #false, as per R7RS.

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 Predicates).

(<= 3 8)
⇒ #t

(<= 3 -3)
⇒ #f

(equal? "house" "houses")
⇒ #f

(eq? #f #f)
⇒
#t

In test condition contexts like if and cond (see 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.

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