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.