# (lispkit bitset)

Library `(lispkit bitset)` implements bit sets of arbitrary size. Bit sets are mutable objects. The API of library `(lispkit bitset)` provides functionality to create, to inspect, to compose, and to mutate bit sets efficiently.

**bitset-type-tag**   <img src="/files/lodKVmz8JxFoYYJUdrx6" alt="" data-size="line">

Symbol representing the `bitset` type. The `type-for` procedure of library `(lispkit type)` returns this symbol for all bitset objects.

**(bitset?&#x20;*****obj*****)**   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *obj* is a bit set, `#f` otherwise.

**(bitset&#x20;*****i ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a new bit set with bits *i ...* set. Each *i* is a fixnum referring to one bit in the bit set by its ordinality.

**(list->bitset&#x20;*****list*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a new bit set with bits specified by *list*. Each element in *list* is a fixnum referring to one bit in the bit set by its ordinality.

**(bitset-copy&#x20;*****bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a copy of bit set *bs*.

**(bitset-size&#x20;*****bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns the number of bits set in bit set *bs*.

**(bitset-next&#x20;*****bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">\
\&#xNAN;**(bitset-next&#x20;*****bs i*****)**

Returns the next bit set in *bs* following bit *i*. If *i* is not provided, the first bit set in *bs* is returned.

**(bitset-empty?&#x20;*****bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if bit set *bs* is empty, `#f` otherwise.

**(bitset-disjoint?&#x20;*****bs1 bs2*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if bit sets *bs1* and *bs2* are disjoint, `#f` otherwise.

**(bitset-subset?&#x20;*****bs1 bs2*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if bit set *bs2* is a subset of bit set *bs2*, `#f` otherwise.

**(bitset-contains?&#x20;*****bs i ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if all bits *i ...* are set in bit set *bs*, `#f` otherwise.

**(bitset-adjoin!&#x20;*****bs i ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Inserts the bits *i ...* into bit set *bs*. `bitset-adjoin!` returns *bs*.

**(bitset-adjoin-all!&#x20;*****bs list*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Inserts all the bits specified by *list* into bit set *bs*. Each element in *list* is a fixnum referring to one bit in the bit set by its ordinality. `bitset-adjoin-all!` returns *bs*.

**(bitset-delete!&#x20;*****bs i ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Removes the bits *i ...* from bit set *bs*. `bitset-delete!` returns *bs*.

**(bitset-delete-all!&#x20;*****bs list*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Removes all the bits specified by *list* from bit set *bs*. Each element in *list* is a fixnum referring to one bit in the bit set by its ordinality. `bitset-delete-all!` returns *bs*.

**(bitset-union!&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Computes the union of bit sets *bs*, *bs1 ...* and stores the result in *bs*. `bitset-union!` returns *bs*.

**(bitset-intersection!&#x20;*****bs bs1 ...*****)**   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Computes the intersection of bit sets *bs*, *bs1 ...* and stores the result in *bs*. `bitset-intersection!` returns *bs*.

**(bitset-difference!&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Computes the difference between bit sets *bs* and *bs1 ...* and stores the result in *bs*. `bitset-difference!` returns *bs*.

**(bitset-xor!&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Computes the exclusive disjunction of bit sets *bs*, *bs1 ...* and stores the result in *bs*. `bitset-xor!` returns *bs*.

**(bitset=?&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if the bit sets *bs*, *bs1 ...* are all equal, i.e. have the same bits set. Otherwise `#f` is returned.

**(bitset\<?&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *bs* is a proper subset of *bs1*, and *bs1* is a proper subset of *bs2*, etc. Otherwise `#f` is returned.

**(bitset>?&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *bs* is a proper superset of *bs1*, and *bs1* is a proper superset of *bs2*, etc. Otherwise `#f` is returned.

**(bitset<=?&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *bs* is a subset of *bs1*, and *bs1* is a subset of *bs2*, etc. Otherwise `#f` is returned.

**(bitset>=?&#x20;*****bs bs1 ...*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *bs* is a superset of *bs1*, and *bs1* is a superset of *bs2*, etc. Otherwise `#f` is returned.

**(bitset->list&#x20;*****bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a list of all bits set in *bs*.

**(bitset-for-each&#x20;*****proc bs*****)**   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Invokes *proc* on each bit set in *bs* in increasing ordinal order.

**(bitset-fold&#x20;*****proc z bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

The current state is initialized to z, and *proc* is invoked on each bit of *bs* in increasing ordinal order and the current state, setting the current state to the result. The algorithm is repeated until all the bits of *bs* have been processed. Then the current state is returned.

**(bitset-any?&#x20;*****pred bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if any application of *pred* to the bits of *bs* returns true, and `#f` otherwise.

**(bitset-every?&#x20;*****pred bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if every application of *pred* to the bits of *bs* returns true, and `#f` otherwise.

**(bitset-filter&#x20;*****pred bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a new bit set containing the bits from *bs* that satisfy *pred*.

**(bitset-filter!&#x20;*****pred bs*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Removes all bits from *bs* for which *pred* returns `#f`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.lisppad.app/libraries/lispkit/lispkit-bitset.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
