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

Mark Proctor mproctor at codehaus.org
Wed Jun 22 15:40:08 EDT 2011


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.

Mark
On 22/06/2011 19:30, Mark Proctor wrote:
> 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
>>
>>
>
> _______________________________________________
> 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