This is what I thought it should be so I was confused when my rule wasn't
firing. Thank you for your response. Somehow magically this morning the
rule is firing as it should be. Ill attribute that to you :)
Thanks
On Fri, Nov 11, 2011 at 12:47 AM, Wolfgang Laun wolfgang.l...@gmail.comwrote:
You need not worry about the object fields you don't care about when
matching the unit fact in a rule. By definition, only slots used in the
pattern matter; all others are literally don't care.
-W
On 11 November 2011 04:57, Hunter McMillen mcmil...@gmail.com wrote:
Hi everyone,
I am trying to match the lhs of a rule using a template that has 112
slots that is defined from a Java class.
Here is the template definition (from show-deftemplates):
(deftemplate MAIN::unit
$JAVA-OBJECT$ eisbot.proxy.model.Unit
(declare (from-class eisbot.proxy.model.Unit)))
Now every time that I encounter a unit object in my application I define
an instance of the unit to Jess from Java:
engine.defclass(unit, eisbot.proxy.model.Unit, null, true); (I only
do this the first time)
Unit unit = //retrieve a unit
engine.definstance(unit, unit, false);
All of this above is working as it should be, but now when I try to match
a unit in a rule I am having trouble:
String unitSeen = (defrule unitSeen +
(unit (ID ?id) (typeID ?typeID)) +
= +
(printout t \Unit seen with ID: \ ?id
crlf));
engine.executeCommand(unitSeen);
The problem is that the Unit class has 112 attributes, I am only listing
two ID and typeID, and there are probably only another handful that I care
about and need to use. Is there any way to ignore the rest of the slots in
the template, matching only on a few slots?
Goal:
The main goal of what I am trying to is that when I encounter a Unit in
my game application, I want to assert that unit object to Jess as a fact,
then match rules on the existence of a Unit. Right now I only want to match
on the existence of ANY unit, but later on the matches will be more
specific.
Any help would be most appreciated.
Thanks.
Hunter McMillen