> 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
