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

Michael Anstis michael.anstis at gmail.com
Fri Jun 24 16:22:16 EDT 2011


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.

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.orghttps://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/20110624/5dbdd6d4/attachment.html 


More information about the rules-dev mailing list