elisp: Bool-Vectors
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.
Several functions work specifically 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 &rest objects
This function creates and returns a bool-vector whose elements are
the arguments, OBJECTS.
-- Function: bool-vector-p object
This returns ‘t’ if OBJECT is a bool-vector, and ‘nil’ otherwise.
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 A and B. If optional
argument C is given, the result of this operation is stored into C.
All arguments should be bool vectors of the same length.
-- Function: bool-vector-union a b &optional c
Return “bitwise or” of bool vectors A and B. If optional argument
C is given, the result of this operation is stored into C. All
arguments should be bool vectors of the same length.
-- Function: bool-vector-intersection a b &optional c
Return “bitwise and” of bool vectors A and B. If optional argument
C is given, the result of this operation is stored into C. 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 A and B. If optional
argument C is given, the result of this operation is stored into C.
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 argument B
is given, the result of this operation is stored into B. All
arguments should be bool vectors of the same length.
-- Function: bool-vector-subsetp a b
Return ‘t’ if every ‘t’ value in A is also t in B, ‘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 A equal B starting at
I. ‘a’ is a bool vector, B is ‘t’ or ‘nil’, and I is an index into
‘a’.
-- Function: bool-vector-count-population a
Return the number of elements that are ‘t’ in bool vector A.
The printed form represents up to 8 boolean values as a single
character:
(bool-vector t nil t nil)
⇒ #&4"^E"
(bool-vector)
⇒ #&0""
You can use ‘vconcat’ to print a bool-vector like other vectors:
(vconcat (bool-vector nil t nil t))
⇒ [nil t nil t]
Here is another example of creating, examining, and updating a
bool-vector:
(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.