GNU Info

Info Node: (guile.info)Booleans

(guile.info)Booleans


Next: Numbers Up: Data Types
Enter node , (file) or (file)node

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?' (Note: Equality) and
numerical and string comparison operators like `string=?' (REFFIXME)
and `<=' (REFFIXME).

     (<= 3 8)
     =>
     #t
     
     (<= 3 -3)
     =>
     #f
     
     (equal? "house" "houses")
     =>
     #f
     
     (eq? #f #f)
     =>
     #t

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

 - primitive: 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'.

 - primitive: boolean? obj
     Return `#t' iff OBJ is either `#t' or `#f'.


automatically generated by info2www version 1.2.2.9