Predicates can be combined using the logical operators ` and`,
` or`, and ` not`.

` (and` *x_1 ... x_n*` )` evaluates each of
*x_1 ... x_n* in order. As soon as
any *x_i* returns ` #f`, ` and` returns ` #f`
without evaluating any remaining *x*'s. If every *x_i*
returns a value other than ` #f`,
the value of ` and` is the value of *x_n* .

(and (fast? x) (cheap? x) (out-of-control? x))

We can use ` and` for safety checks. For example, the predicate
` (zero?` *x*` )` requires that *x* be a number. To prevent
errors, we can test the argument first:

(define (safe-zero? x) (and (number? x) (zero? x)) )