Thanks!
Actually there was a bug in my Fact.equals() method, as it was receiving
a Fact instead of an Object :p
I also confirmed that I must implement Fact.hashCode() as well, so that
rule r1 works properly.

Henrique


Ernest Friedman-Hill wrote:
> Jess will call Fact.equals() to evaluate the first rule -- if Fact
> doesn't override equals(), then of course Object's version is used,
> which is based on identity. Jess may also call Fact.hashCode() as part
> of computing a hashcode for the jess.Fact objects.
>
>
> On Jul 12, 2010, at 4:56 AM, Henrique Lopes Cardoso wrote:
>
>> Hi,
>>
>> I have 2 deftemplates, each of which includes a slot with a Java object.
>> I want to have a rule that fires when the objects inside those slots are
>> equal. This is my implementation:
>>
>> (deftemplate t1 (slot o))
>> (deftemplate t2 (slot o))
>>
>> (defrule r1
>>    (t1 (o ?obj))
>>    (t2 (o ?obj))
>>    =>
>>    (printout t "--r1--->" (call ?obj getX) crlf) )
>>
>> (defrule r2
>>    (t1 (o ?obj1))
>>    (t2 (o ?obj2))
>>    (test (= (call ?obj1 equals ?obj2) TRUE))
>>    =>
>>    (printout t "--r2--->" (call ?obj1 getX) crlf) )
>>
>> (reset)
>> (assert (t1 (o (new Fact 1))))
>> (assert (t2 (o (new Fact 1))))
>> (facts)
>> (run)
>>
>> As can be easily seen, my Fact class has an x attribute accessible via
>> getX(). I have also implemented equals().
>> Rule r2 works fine.
>>
>> I was just trying to better understand the contents of section 8.4 of
>> the manual, where it is said that "Jess may call the equals and hashCode
>> methods of any objects in working memory". This does not mean that rule
>> r1 should fire, right? Rule r1 really demands for the references to
>> refer to the same object, not equal objects, am I right?
>> So, in this case should I implement hashCode()? It does not seem to be
>> necessary. Is it crucial only when using shadow facts?
>>
>> Thanks.
>>
>> Henrique



--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [email protected]'
in the BODY of a message to [email protected], NOT to the list
(use your own address!) List problems? Notify [email protected].
--------------------------------------------------------------------

Reply via email to