doh, mark just pointed out my typo.

that should have been

 exist politician (honest == true)

peter


On 3/21/06, 王在祥 <[EMAIL PROTECTED]> wrote:
>
> Thanks, It looks your example is much clear for "Not join", but
>
> rule "not rule test"
>     when
>
>         not Cheese( price == 5 )
>     then
>                 list.add( new Integer( 5 ) );
> end
>
> // the code is from
>
> http://anonsvn.labs.jboss.com/trunk/labs/jbossrules/drools-compiler/src/test/resources/org/drools/integrationtests/not_rule_test.drl
>
> the working memory contains more Cheese object, some with price==5,
> some without,
> in the case, how the Join operating?  as the TestCase below, when
> there is the case, the consequence is not executed.
>
> public void testNot() throws Exception {
>         PackageBuilder builder = new PackageBuilder();
>         builder.addPackageFromDrl( new InputStreamReader(
> getClass().getResourceAsStream( "not_rule_test.drl" ) ) );
>         Package pkg = builder.getPackage();
>
>         RuleBase ruleBase = getRuleBase();
>         ruleBase.addPackage( pkg );
>         WorkingMemory workingMemory = ruleBase.newWorkingMemory();
>
>         List list = new ArrayList();
>         workingMemory.setGlobal( "list", list );
>
>         Cheese stilton = new Cheese("stilton", 5);
>         FactHandle stiltonHandle = workingMemory.assertObject( stilton );
>         Cheese cheddar = new Cheese("cheddar", 7);
>         FactHandle cheddarHandle = workingMemory.assertObject( cheddar
> );
>         workingMemory.fireAllRules();
>
>         assertEquals( 0, list.size() );
>
>         workingMemory.retractObject( stiltonHandle );
>
>         workingMemory.fireAllRules();
>
>         assertEquals( 1, list.size() );
>     }
>
>
> 2006/3/22, Peter Lin <[EMAIL PROTECTED]>:
> >
> > strictly speaking, the simple "not cheese ( prince == 5) would get
> > translated to an alphaNode that is (price !=5).
> >
> > Not join is for checking cases where two or more objects are joined and
> > the
> > entire condition is negated. As in
> >
> > rule "not example"
> >   when
> >     object1($blah:blah)
> >     object2($blah2:blah2)
> >     not ($blah == $blah2)
> > then
> >     do something
> >
> > Not exists is different. Not exists means that if a single fact matching
> > the
> > conditions do not exist. In other words
> >
> > rule "politician"
> >   when
> >     not exist politician (honest == true)
> >   then
> >     incarcerate all politicians
> >
> > In the not join case, there may be multiple matches that will fire. in
> the
> > Not exist case, it should only fire that rule once.
> >
> > peter
> > On 3/21/06, 王在祥 <[EMAIL PROTECTED]> wrote:
> > >
> > > How to understand the not expression?
> > >
> > > rule "not rule test"
> > >     when
> > >
> > >         not Cheese( price == 5 )
> > >     then
> > >                 list.add( new Integer( 5 ) );
> > > end
> > >
> > >
> > > Does it means that for each Cheese(price != 5), then fire the rule, or
> > if
> > > there not exists Cheese(price == 5) then fire the rule?
> > >
> > >
> > > >
> > >
> > >
> >
> >
>

Reply via email to