All predicatesShow sourcenb_set.pl -- Non-backtrackable sets

This library provides a non-backtrackabe set of terms that are variants of each other. It is primarily intended to implement distinct/1 from library(solution_sequences). The set is implemented as a hash table that is built using non-backtrackable primitives, notably nb_setarg/3.

The original version of this library used binary trees which provides immediate ordering. As the trees were not balanced, performance could get really poor. The complexity of balancing trees using non-backtrackable primitives is too high. The next iteration used open hash tables, while the current incarnation uses closed hash tables, providing better perfomance and less space usage.

author
- Jan Wielemaker
Source empty_nb_set(-Set)
Create an empty non-backtrackable set.
Source add_nb_set(+Key, !Set) is det
Source add_nb_set(+Key, !Set, ?New) is semidet
Insert Key into the set. If a variant (see =@=/2) of Key is already in the set, the set is unchanged and New is unified with false. Otherwise, New is unified with true and a copy of Key is added to the set.
To be done
- Computing the hash for cyclic terms is performed with the help of term_factorized/3, which performs rather poorly.
Source index(+Hash, +Capacity, -Index) is nondet[private]
Generate candidate values for Index, starting from Hash mod Capacity, round tripping to 1 when Capacity is reached.
 hash_key(+Key, -Hash:integer) is det[private]
Compute a hash for Term. Note that variant_hash/2 currently does not handle cyclic terms, so use term_factorized/3 to get rid of the cycles. This means that this library is rather slow when cyclic terms are involved.
Source nb_set_to_list(+NBSet, -OrdSet) is det
nb_set_to_list(-NBSet, +List) is det
Get the elements of a an nb_set. OrdSet is sorted to the standard order of terms, providing a set representation that is compatible to library(ordsets).
Source gen_nb_set(+Set, -Key) is nondet
Enumerate the members of a set in the standard order of terms.
Source size_nb_set(+Set, -Size) is det
Unify Size with the number of elements in the set

Re-exported predicates

The following predicates are exported from this file while their implementation is defined in imported modules or non-module files loaded by this module.

Source add_nb_set(+Key, !Set) is det
Source add_nb_set(+Key, !Set, ?New) is semidet
Insert Key into the set. If a variant (see =@=/2) of Key is already in the set, the set is unchanged and New is unified with false. Otherwise, New is unified with true and a copy of Key is added to the set.
To be done
- Computing the hash for cyclic terms is performed with the help of term_factorized/3, which performs rather poorly.