[rules-dev] Prolog Style Backward Chaining - First Cut

Mark Proctor mproctor at codehaus.org
Mon Apr 18 10:57:04 EDT 2011


Here is a more friendly example based around "Adventures in Proglog"'s 
"Nani Search". This is just a sampling of queries and rules, which it 
uses to provide an adventure like game environment. The "?" means to 
pull results, rather than the normal reactive nature of patterns.
http://www.amzi.com/AdventureInProlog/

query niceFood( String thing, String location )
     location(thing, location) and
     edible(thing)
end

query connect( String x, String y )
     door(x, y;)
     or
     door(y, x;)
end

query look(String place, List things, List exits)
     things : List() from accumulate( Location(thing, place;) ,
                                                             
collectList( thing ) )
     food : List() from accumulate( ?niceFood(thing, place;) ,
                                                         collectList( 
thing ) )
     exits : List() from accumulate( ?connect(place, exit;) ,
                                                          collectList( 
[place, exit] ) )
end

rule reactiveLook when
     Here( place : location)
     ?look2(place, things, exits)
then       System.out.println( "  You are in the " + place );
     System.out.println( "  You can see " + things );
     System.out.println( "     You can eat" + eat );
     System.out.println( "     You can go to " + exits );
end

-----Output----
   You are in the kitchen
      You can see [crackers, broccoli, apple]
      You can eat[crackers, apple]
      You can go to [[kitchen, dining room], [kitchen, cellar]]



More information about the rules-dev mailing list