> In classical logic programming, there is the concept of unification,
...
> It seems to me that by appropriate use of indexes, it should be
> possible to unify against the entire database simultaneously, or 
> at least to isolate a small fraction of it as potential matches 
> so that the individual unification algorithm need not be run against
> every expression in the database.

Hi Russell,

I have not looked into the structure myself, but I recall hearing once that
a data structure called a "unification tree" is helpful here. A quick
web-search wasn't immediately helpful though - the best resources appear to
be subscription services - it looks like you'll have to visit your local
university's library to access the full paper.

Some other thoughts:

The Prolog clause database effectively has this same problem. It solves it
simply by indexing on the functor of the outermost term and the first
argument of that term. This may be enough for your problem. As Donald Knuth
puts it, premature optimization is the root of all evil.

Even if you can't get your hand on a description of a unification tree, I
wouldn't imagine it would be too difficult to build an appropriate
tree-structured index (especially given that the unification algorithm does
itself operate over trees). If your data doesn't change much, you can
probably search efficiently, even in the case of unbound variables in the
query term, by indexing your data in several places (i.e., indexing with
some arguments ignored).

Hope that is helpful,

-Benjamin Johnston




-------------------------------------------
agi
Archives: https://www.listbox.com/member/archive/303/=now
RSS Feed: https://www.listbox.com/member/archive/rss/303/
Modify Your Subscription: 
https://www.listbox.com/member/?member_id=8660244&id_secret=117534816-b15a34
Powered by Listbox: http://www.listbox.com

Reply via email to