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

lengthelements, each one initialized toinitial.

There are also some bool-vector set operation functions, described below:

— Function: **bool-vector-exclusive-or**` a b &optional c`

Return bitwise exclusive or of bool vectors

aandb. If optional argumentcis given, the result of this operation is stored intoc. All arguments should be bool vectors of the same length.

— Function: **bool-vector-union**` a b &optional c`

Return bitwise or of bool vectors

aandb. If optional argumentcis given, the result of this operation is stored intoc. All arguments should be bool vectors of the same length.

— Function: **bool-vector-intersection**` a b &optional c`

Return bitwise and of bool vectors

aandb. If optional argumentcis given, the result of this operation is stored intoc. All arguments should be bool vectors of the same length.

— Function: **bool-vector-set-difference**` a b &optional c`

Return set difference of bool vectors

aandb. If optional argumentcis given, the result of this operation is stored intoc. All arguments should be bool vectors of the same length.

— Function: **bool-vector-not**` a &optional b`

Return set complement of bool vector

a. If optional argumentbis given, the result of this operation is stored intob. All arguments should be bool vectors of the same length.

— Function: **bool-vector-subsetp**` a b`

Return

`t`

if every`t`

value inais also t inb,`nil`

otherwise. All arguments should be bool vectors of the same length.

— Function: **bool-vector-count-consecutive**` a b i`

Return the number of consecutive elements in

aequalbstarting ati.`a`

is a bool vector,bis`t`

or`nil`

, andiis an index into`a`

.

— Function: **bool-vector-count-population**` a`

Return the number of elements that are

`t`

in bool vectora.

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.