### 6.7 Bool-vectors

A bool-vector is much like a vector, except that it stores only the
values `t`

and `nil`

. If you try to store any non-`nil`

value into an element of the bool-vector, the effect is to store
`t`

there. As with all arrays, bool-vector indices start from 0,
and the length cannot be changed once the bool-vector is created.
Bool-vectors are constants when evaluated.

There are two special functions for working with bool-vectors; aside
from that, you manipulate them with same functions used for other kinds
of arrays.

— Function:

**make-bool-vector**` length initial`
Return a new bool-vector of `length` elements,
each one initialized to `initial`.

— Function:

**bool-vector-p**` object`
This returns `t`

if `object` is a bool-vector,
and `nil`

otherwise.

Here is an example of creating, examining, and updating a
bool-vector. Note that the printed form represents up to 8 boolean
values as a single character.

(setq bv (make-bool-vector 5 t))
⇒ #&5"^_"
(aref bv 1)
⇒ t
(aset bv 3 nil)
⇒ nil
bv
⇒ #&5"^W"

These results make sense because the binary codes for control-_ and
control-W are 11111 and 10111, respectively.