# (lispkit disjoint-set)

Library `(lispkit disjoint-set)` implements disjoint sets, a mutable union-find data structure that tracks a set of elements partitioned into disjoint subsets. Disjoint sets are based on hashtables and require the definition of an equality and a hash function.

**disjoint-set-type-tag** <img src="/files/viHiVHsCY8Wn2TeCgWJj" alt="" data-size="line">

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

**(disjoint-set? \_obj**\_**)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns `#t` if *obj* is a disjoint set object; otherwise `#f` is returned.

**(make-eq-disjoint-set)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a new empty disjoint set using `eq` as equality and `eq-hash` as hash function.

**(make-eqv-disjoint-set)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Returns a new empty disjoint set using `eqv` as equality and `eqv-hash` as hash function.

**(make-disjoint-set&#x20;*****comparator)***   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">\
\&#xNAN;**(make-disjoint-set&#x20;*****hash eql*****)**

Returns a new empty disjoint set using *eql* as equality and *hash* as hash function. Instead of providing two functions, a new disjoint set can also be created based on a *comparator*.

**(disjoint-set-make&#x20;*****dset x*****)**   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Adds a new singleton set *x* to *dset* if element *x* does not exist already in disjoint set *dset*.

**(disjoint-set-find&#x20;*****dset x)***   <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">\
\&#xNAN;**(disjoint-set-find&#x20;*****dset x default*****)**

Looks up element *x* in *dset* and returns the set in which *x* is currently contained. Returns *default* if element *x* is not found. If *default* is not provided, `disjoint-set-find` uses `#f` instead.

**(disjoint-set-union&#x20;*****dset x y*****)** <img src="/files/STqjiJsrexexyFklGQwH" alt="" data-size="line">

Unifies the sets containing *x* and *y* in disjoint set *dset*.

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

Returns the number of sets in *dset*.


---

# 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-disjoint-set.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.
