[rules-users] how "exists" works exactly?

miguel machado mls.machado at gmail.com
Thu May 6 04:06:17 EDT 2010


Olá Antonio,

// retract all of it just in case
for (Object fact : ksession.getFactHandles()) {
  ksession.retract((FactHandle) fact);
}

Hope this helps.
_ miguel



2010/5/5 Antonio Neto <antoniosouzaneto at gmail.com>

> Hi,
>
> Thank you very much for all replies.
>
> I've tried also with not ( EPackage(...)), but the result is the same.
>
> I think that I remove the EClass from the facts in my solution, but they
> continue in my workingMemory.
>
> How I can see the facts of the workingMemory object (and how remove it)?
>
> Thanks
>
> Best regards
>
> Antonio
>
> 2010/5/5 <fgadrat at genigraph.fr>
>
>> Hi Antonio,
>> Documentation states that the complement to "not" is "exists", whereas
>> "not" keyword is used to match the absence of a fact (in Working Memory),
>> and "exists" keyword is used to test the existence of one or more facts (in
>> Working memory).
>>
>> So if you want to test that a fact is not in working memory, then you
>> should  use the
>> not(MyClass()) pattern.
>>
>> Hope this helps,
>> Francois.
>>
>> Antonio Neto <antoniosouzaneto at gmail.com> a écrit :
>>
>>
>> > Any idea? Please...
>> >
>> > 2010/5/4 Antonio Neto <antoniosouzaneto at gmail.com>
>> >
>> >> Hi all,
>> >>
>> >> I don't know exactly why I have a problem in my "exists" function. I've
>> >> tried many different ways, but it does not work. Anybody could help me,
>> >> please?
>> >>
>> >>
>> >> I have the following rules:
>> >>
>> >> *rule "diff"
>> >> when
>> >>     $var1: EReference(name == "employee")
>> >>     $var2: EClass(name == "Company", EAllReferences contains $var1)
>> >>     not (exists( EPackage(EClassifiers contains $var2 ) ))
>> >> then
>> >>     insertLogical(new IntConstraintOccurrence("diff", 10));
>> >> end
>> >>
>> >> rule "ClassesNotReferenced"
>> >>     when
>> >>         $q1 : EClass();
>> >>         $q2 : EPackage(EClassifiers contains $q1);
>> >>         not( exists ( EReference(EType == $q1) ));
>> >>     then
>> >>         insertLogical(new
>> IntConstraintOccurrence("ClassesNotReferenced",
>> >> 1, $q1));
>> >> end*
>> >>
>> >>
>> >> and in my facts (and my EPackage) I have 4 instances of EClass
>> "Company"
>> >> with a EReference "employee", and another EClass "Person".  I still
>> have a
>> >> "move" that removes EClasses in my Drools Solver.
>> >>
>> >> I need to have only one classe "Company" after processing. But it
>> removes
>> >> only the EClass "Person", when it was supposed to remove one EClass
>> "Person"
>> >> and 3 ECLasses "Company". Leaving one EClass "Company" in the end.
>> >>
>> >> The problem is:  when Drools tries to remove a EClass "Person" it
>> thinks
>> >> that  the EClass "Company" does not exists. But in fact there are 3
>> others.
>> >>
>> >> Any clue about it, please ?
>> >>
>> >> Thanks
>> >>
>> >> Bests regards
>> >>
>> >> Antonio
>> >>
>> >>
>> >>
>> >
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
"To understand what is recursion you must first understand recursion"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100506/6481bccf/attachment.html 


More information about the rules-users mailing list