Булев вектор очень похож на вектор, за исключением того, что он хранит только значения t и nil. Если вы попытаетесь сохранить в элемент булева вектора любое значение, отличное от nil, то вместо этого будет сохранено t. Как и во всех массивах, индексы булевых векторов начинаются с 0, и длину нельзя изменить после создания булева вектора.
Булевы векторы являются константами при вычислении.
Несколько функций работают специально с булевыми векторами; помимо этого, вы манипулируете ими с помощью тех же функций, которые используются для других типов массивов.
Возвращает новый булев вектор с length элементами, каждый из которых инициализирован значением initial.
Эта функция создает и возвращает булев вектор, чьи элементы — это переданные аргументы, objects.
Возвращает t, если object является булевым вектором, и nil в противном случае.
Существуют также некоторые функции операций над булевыми векторами, описанные ниже:
Возвращает побитовое исключающее ИЛИ булевых векторов a и b. Если указан необязательный аргумент c, результат этой операции сохраняется в c. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает побитовое ИЛИ булевых векторов a и b. Если указан необязательный аргумент c, результат этой операции сохраняется в c. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает побитовое И булевых векторов a и b. Если указан необязательный аргумент c, результат этой операции сохраняется в c. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает разность множеств булевых векторов a и b. Если указан необязательный аргумент c, результат этой операции сохраняется в c. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает дополнение множества булевого вектора a. Если необязательный аргумент b указан, результат этой операции сохраняется в b. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает t, если каждое значение t в a также t в
b, и nil в противном случае. Все аргументы должны быть булевыми векторами одинаковой длины.
Возвращает количество последовательных элементов в a, равных b,
начиная с i. a — булев вектор, b — t
или nil, а i — индекс в a.
Возвращает количество элементов, равных t в булевом векторе a.
Выведенная форма представляет до 8 булевых значений в одном символе:
(bool-vector t nil t nil)
⇒ #&4"^E"
(bool-vector)
⇒ #&0""
Вы можете использовать vconcat для вывода булева вектора, как и другие векторы:
(vconcat (bool-vector nil t nil t))
⇒ [nil t nil t]
Вот еще один пример создания, просмотра и обновления булева вектора:
(setq bv (make-bool-vector 5 t))
⇒ #&5"^_"
(aref bv 1)
⇒ t
(aset bv 3 nil)
⇒ nil
bv
⇒ #&5"^W"
Эти результаты имеют смысл, потому что двоичные коды для control-_ и control-W составляют 11111 и 10111 соответственно.