[rules-users] Unification with logical or question

Wolfgang Laun wolfgang.laun at gmail.com
Sat Jun 9 01:35:00 EDT 2012


On 08/06/2012, bdolbeare <bdolbeare at yahoo.com> wrote:
> Can someone explain to me why these two rules behave differently?  I
> expected
> that the second rule would produce the same output as the first but it
> seems
> to ignore the first half of the logical or expression.  Is this because the
> unification happens before the null checks occur?
>

It's a simple case of the "sorprise" ( sic ;-) ).

A rule containing the Conditional Element "or" is transformed into two
(or more, depending on the number of operands) rules running under the
same name. See the Expert manual.

-W

>
>
> declare Foo
> 	name : String
> 	item : Item
> end
> declare Item
> 	id : long
> end
>
> rule "insert stuff"
> 	when
> 	then
> 		Item item1 = new Item(1);
> 		
> 		Foo foo1 = new Foo("foo1", item1);
> 		insert(foo1);
> 		
> 		Foo foo3 = new Foo("foo3", null);
> 		insert(foo3);
> end
> rule "Unification Test Rule"
> 	when
> 		f : Foo ( item != null, $item := item )		
> 		f2 : (
> 			Foo ( item == null )
> 			or Foo ( $item := item )
> 			)
> 	then
> 		System.out.println(String.format("%s Fired:\n\tFoo: %s\n\t%s",
> kcontext.getRule().getName(), f, f2));
> end
> rule "Unification Test Rule 2"
> salience -10
> 	when
> 		f : Foo ( item != null, $item := item )		
> 		f2 : Foo ( ( item == null ) || ( item != null && $item := item ) )
> 	then
> 		System.out.println(String.format("%s Fired:\n\tFoo: %s\n\t%s",
> kcontext.getRule().getName(), f, f2));
> end
>
>
> Unification Test Rule Fired:
> 	Foo: Foo( name=foo1, item=Item( id=1 ) )
> 	Foo( name=foo3, item=null )
> Unification Test Rule Fired:
> 	Foo: Foo( name=foo1, item=Item( id=1 ) )
> 	Foo( name=foo1, item=Item( id=1 ) )
>
> Unification Test Rule 2 Fired:
> 	Foo: Foo( name=foo1, item=Item( id=1 ) )
> 	Foo( name=foo1, item=Item( id=1 ) )
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Unification-with-logical-or-question-tp4017826.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list