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

Mark Proctor mproctor at codehaus.org
Wed Jun 22 14:30:07 EDT 2011


ok I managed to re-create the test with:
             "package org.drools.test  \n" +

             "import java.util.List\n" +
             "import java.util.ArrayList\n" +

             "global List list\n" +

             "dialect \"mvel\"\n" +

             "declare Person\n" +
             "   name : String\n" +
             "   likes : String\n" +
             "end\n" +
             "\n" +
             "declare Location\n" +
             "    thing : String \n" +
             "    location : String \n" +
             "end\n" +
             "\n" +
             "declare Edible\n" +
             "   thing : String\n" +
             "end\n" +
             "\n" +
             "\n" +
             "query hasFood( String x, String y ) \n" +
             "    Location(x, y;) " +
             "     or \n " +
             "    ( Location(z, y;) and ?hasFood(x, z;) )\n"+
             "end\n" +
             "\n" +
             "rule look when \n" +
             "    Person( $l : likes ) \n" +
             "    hasFood( $l, 'kitchen'; )\n" +
             "then\n" +
             "   list.add( 'kitchen has ' + $l );" +
             "end\n" +
             "rule go1 when\n" +
             "    String( this == 'go1') \n" +
             "then\n" +
             "        insert( new Person('zool', 'peach') );\n" +
             "        insert( new Location(\"table\", \"kitchen\") );\n" +
             "        insert( new Location(\"peach\", \"table\") );\n" +
             "end\n"  +
             "\n";

On 22/06/2011 18:25, Mark Proctor wrote:
> On 22/06/2011 16:39, Wolfgang Laun wrote:
>> This is related to the example in 2.1.2.8., Backward Chaining.
>>
>> Using the same rules and queries given there, the sequence of fact insertions
>>
>>       insert( new Here( "table" ) );
>>       insert( new Edible( "peach" ) );
>>       insert( new Location( "peach", "table" ) );
>>
>> results in nothing being seen and nothing being edible, whereas
>>
>>       insert( new Edible( "peach" ) );
>>       insert( new Location( "peach", "table" ) );
>>       insert( new Here( "table" ) );
>>
>> results in the obvious and expected result.
>>
>> There is no difference w.r.t. using '?' in front of query names.
> Take a look at the tests here, see if you can add the logic that you
> think should works and doesn't and let us know. As far as I know
> insertion order should not matter:
> https://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/java/org/drools/integrationtests/BackwardChainingTest.java
>
> Mark
>> -W
>>
>> _______________________________________________
>> 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
>
>




More information about the rules-dev mailing list