Did you know ... | Search Documentation: |
Packs (add-ons) for SWI-Prolog |
Title: | Prolog index utils |
---|---|
Rating: | Not rated. Create the first rating! |
Latest version: | 0.0.2 |
SHA1 sum: | 034a123ec444debf11cec0e3bdef84333906e026 |
Author: | Chris Mungall <cmungall@gmail.com> |
Packager: | Chris Mungall <cmungall@gmail.com> |
Home page: | https://github.com/cmungall/index_util |
Download URL: | https://github.com/cmungall/index_util/releases/*.zip |
No reviews. Create the first review!.
Version | SHA1 | #Downloads | URL |
---|---|---|---|
0.0.1 | c4de98c021fdbda38458d34e04533edcfb8ff8cf | 7 | https://github.com/cmungall/index_util/archive/v0.0.1.zip |
0.0.2 | 034a123ec444debf11cec0e3bdef84333906e026 | 251 | https://github.com/cmungall/index_util/archive/v0.0.2.zip |
Cache all results of calling a prolog goal
Example:
use_module(library(index_util)). anc(A,B) :- isa(A,B). anc(A,B) :- isa(A,Z),anc(Z,B). ix :- materialize_index(anc(1,1)). redundant_isa(A,B) :- isa(A,B), anc(A,Z), anc(Z,B).
When using this, optionally called ix/0 first in order to enumerate all possible anc/2 facts.
Indexes can also be persisted to disk
This module was created before swi-prolog introduced just-in-time indexing on all arguments, obviating the need for index/1.
However, index_utils is still useful for non-unit clauses (rules), where ground terms need to be recalculated each time
This module was created before swi-prolog introduced the tabling module. In many cases you will be better off with tabling.
In particular, note that index_util can only be used if the clause can be fully enumerated.
This is designed to be a swap-in replacement for index/1. Indexing a fact with M arguments on N of those arguments will generate N sets of facts with arguments reordered to take advantage of first-argument indexing. The original fact will be rewritten.
For example, calling:
materialize_index(my_fact(1,0,1)).
will retract all my_fact/3 facts and generate the following clauses in its place:
my_fact(A,B,C) :- nonvar(A), !, my_fact__ix_1(A,B,C). my_fact(A,B,C) :- nonvar(C), !, my_fact__ix_3(C,A,B). my_fact(A,B,C) :- my_fact__ix_1(A,B,C).
here my_fact__ix_1
and my_fact__ix_3
contain the same data as the original my_fact/3 clause. In the second case, the arguments have been reordered
Single key indexing only. Could be extended for multikeys.
No automatic recalculation if underlying facts change. Should not be used on dynamic databases.
Does not have to be used with fact (unit clauses) - but the clauses should enumerable
Pack contains 4 files holding a total of 12.7K bytes.