[rules-dev] Perhaps an undocumented feature of Backward Chaining?

Wolfgang Laun wolfgang.laun at gmail.com
Sat Jun 25 03:17:50 EDT 2011


Added  BackwardChainingTest.testInsertionOrderTwo  which will *fail*, so
don't be shocked if Hudson turns purple.

-W


On 24 June 2011 22:35, Mark Proctor <mproctor at codehaus.org> wrote:
> On 24/06/2011 21:22, Michael Anstis wrote:
>
> Your test, Mark, is not the same example to which Wolfgang refers.
>
> You'll need to re-test with the DRL at the end of Wolfgang's email (which
is
> what we've included in N&N for 5.2).
>
> It's quite possible one of the ?'s is simply wrong... but I don't
understand
> the subtleties of BC syntax yet.
>
> If the query has "?" in it, then it's pull only. In which case the
insertion
> order matters, as the query is triggered when Here or in below Person is
> triggered. Inserting the Location objects after the query is triggered
will
> not return a result, unless you use leave off the "?" for a reactive "open
> query"
>
> Mark
>
> With kind regards,
>
> Mike
>
> On 24 June 2011 21:14, Mark Proctor <mproctor at codehaus.org> wrote:
>>
>> On 23/06/2011 13:20, Wolfgang Laun wrote:
>>
>> Still not resolved...
>>
>> I have added a test for all the possible insertion orders for that
>> particular use case and was not able to reproduce a problem:
>>
>>
https://github.com/droolsjbpm/drools/commit/501f2196dcef754eed5a28b066b50665a5bc29a3
>>
>> MArk
>>
>> On 22 June 2011 21:40, Mark Proctor <mproctor at codehaus.org> wrote:
>>>
>>> heh, I made a mistake with the rule
>>> ( Location(z, y;) and ?hasFood(x, z;) )
>>> should be
>>> ( Location(z, y;) and hasFood(x, z;) )
>>>
>>> Otherwise it's not reactive, and then ordering matters.
>>>
>>> With that change I can do the insertions in any order and all is fine.
>>>
>>
>> This works for the example you gave. But the one taken from the
>> "Introduction" still depends on the order the facts are inserted. Below
is
>> the .drl, which does not need any pojos. Rule kickOff contains the order
>> that produces nothing to see and eat:
>> You are in the table
>>   You can see []
>>   You can eat []
>>
>> Insert Here after the others, and it works.
>>
>> -W
>>
>>  import java.util.List
>>
>> declare Thing
>>     thing : String @key
>> end
>>
>> declare Edible extends Thing
>> end
>>
>> declare Location extends Thing
>>     location : String  @key
>> end
>>
>> declare Here
>>     place : String
>> end
>>
>> rule kickOff
>> when
>> then
>>     System.out.println( "insert Here" );
>>     insert( new Here( "table" ) );
>>     System.out.println( "insert Edible" );
>>     insert( new Edible( "peach" ) );
>>     System.out.println( "insert Location" );
>>     insert( new Location( "peach", "table" ) );
>> end
>>
>> # 2011-06-22
>> query isContainedIn( String x, String y )
>>     Location(x, y;)
>>     or
>>     ( Location(z, y;) and /*?*/isContainedIn(x, z;) )
>> end
>>
>> query whereFood( String x, String y )
>>     ( Location(x, y;) and
>>     Edible(x;) )
>>     or
>>     ( Location(z, y;) and /*?*/whereFood(x, z;) )
>> end
>>
>> query look(String place, List things, List food)
>>     Here(place;)
>>     things := List() from accumulate( Location(thing, place;),
>>                                       collectList( thing ) )
>>     food := List() from accumulate( /*?*/whereFood(thing, place;),
>>                                     collectList( thing ) )
>> end
>>
>> rule reactiveLook
>> when
>>     Here( $place : place)
>>     /*?*/look($place, $things; $food := food)
>> then
>>     System.out.println( "You are in the " + $place);
>>     System.out.println( "  You can see " + $things );
>>     System.out.println( "  You can eat " + $food );
>> end
>>
>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>
>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110625/93c49813/attachment.html 


More information about the rules-dev mailing list