Fabian Meyer created DROOLS-1001:
------------------------------------
Summary: Tabled Logic Programming-like mechanism to avoid infinite query
recursion
Key: DROOLS-1001
URL:
https://issues.jboss.org/browse/DROOLS-1001
Project: Drools
Issue Type: Feature Request
Reporter: Fabian Meyer
Assignee: Mark Proctor
Priority: Optional
Queries, such as a transitive closure, will lead to an infinite query recursion in
PHREAK:
{code:drl}
declare Resource
name : String @key
end
declare partOf
subject : Resource @key
object : Resource @key
end
rule "init"
when
then
Resource a = new Resource("a");
Resource b = new Resource("b");
Resource c = new Resource("c");
insert (new partOf(a,b));
insert (new partOf(a,c));
end
rule "print container"
when
trans_partOf(part, container;)
then
System.out.println(part + " partOf " + container);
end
query trans_partOf(Resource part, Resource container)
// Find direct asserted fact
partOf(part,container;)
or
// Find the transitive closure
trans_partOf(part, p;)
and
trans_partOf(p, container;)
end
{code}
The algorithm can easily be rewritten as a production rule, resulting in a huge amount of
materialized facts in large knowledge bases, which are probably never needed.
In Logic Programming, a mechanism called Tabled Logic Programming is used to avoid such
infinite recursion. Maybe the tabling mechanism can be adapted to PHREAK, in order to
avoid fact materilization when using production rules instead of queries.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)