[rules-users] Reasoning over hierarchies.
David Sinclair
dsinclair at chariotsolutions.com
Wed Jan 21 09:27:33 EST 2009
You could have something along the lines
class Person {
Person parent;
Collection getAncestors() {
Collection<Person> ancestors = new HashSet<Person>();
Person currentAncestor = parent;
while(currentAncestor != null) {
ancestors.add(currentAncestor);
currentAncestor = currentAncestor.getParent();
}
}
}
query isAncestor(String a, String b)
p: Person(name = a)
c: Person(name = b, ancestors contains p)
end
that should do it
dave
On Wed, Jan 21, 2009 at 8:54 AM, Faron Dutton <fgdutton at gmail.com> wrote:
> I know this has probably been asked before but I cannot find any mention of
> it. How does one reason over a transitive (recursive) relation in Drools?
>
> -----------------------------------------------------------
>
> The classic example from Prolog:
>
> -- The relation parent(P,C) says that P is a parent of C.
> parent(P,C).
>
> -- The predicate ancestor(A,B) implies that A is an ancestor
> -- of B if A is a parent of B or A is a parent of C and C
> -- is an ancestor of B.
> ancestor(A,B) :- parent(A,B).
> ancestor(A,B) :- parent(A,C), ancestor(C,B).
>
> -- The query ancestor(bob,frank) asks if bob is an ancestor
> -- of frank.
> ?- ancestor(bob,frank).
>
> -----------------------------------------------------------
>
> In Drools, I can find the parent using
>
> query isParent(String a, String b)
> p: Person(name = a)
> c: Person(name = b, parent = p)
> end
>
> likewise, I can find the grandparent using
>
> query isGrandparent(String a, String b)
> g: Person(name = a)
> p: Person(parent = g)
> c: Person(name = b, parent = p)
> end
>
> I am unable to formulate the query isAncestor.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090121/749c3450/attachment.html
More information about the rules-users
mailing list