Since the accumulate-NextTo pattern
  (accumulate (bind ?xcount 0) (++ ?xcount) ?xcount (NextTo (room1 ?rid)))
doesn't include a room2 match, shouldn't the pattern be matched just once for 
any one ?rid instantiation?  The documentation is not clear about what a token 
means: a match to a fact or a node in the Rete network.

Incidentally, deftemplate Room includes a default of "false" for a boolean 
slot.  Due to case sensitivity, the default should probably be "FALSE".

Bob Kirby

At 08:39 AM 6/27/2007, Wolfgang Laun wrote:
>Perhaps this is of interest: The original code had two rules - the only ones 
>with accumulate - as the fifth and sixth rule between (reset) and (run), and 
>the problem didn't surface until I added number 6.
>-W
>
>Ernest Friedman-Hill wrote:
>
>>This appears to be an "incremental reset" bug. The term "incremental  
>>reset" refers to the special processing that has to be done to bring  
>>a rule up to date if it's added to an already-populated working  
>>memory. Jess expects you to do things the other way around: compile  
>>the Rete network by defining all the rules, and then push the data  
>>through it; and indeed, if you move your "reset" to after the rules  
>>are defined, they both fire correctly.
>>
>>Thanks for the report; we'll look into this further and get it fixed.
>>
>>On Jun 27, 2007, at 10:34 AM, Wolfgang Laun wrote:
>>
>>>In the program below, Jess will only fire the second rule if both  
>>>are uncommented, but each of them fires if the other one isn't  
>>>there. If the order of rule definitions is reversed, the second one  
>>>"wins" again.
>>>
>>>Jess Version 7.0p1
>>>
>>>Kind regards
>>>Wolfgang
>>>
>>>(clear)
>>>
>>>(deftemplate Obj
>>>   (slot id           (type STRING))
>>>)
>>>
>>>(deftemplate Room extends Obj
>>>   (slot occupied (type SYMBOL)(default false)) ; Boolean
>>>)
>>>
>>>(deftemplate Suite extends Room
>>>   (slot rooms (type INTEGER)))
>>>
>>>(deftemplate Single extends Room)
>>>(deftemplate Double extends Room)
>>>
>>>
>>>(deftemplate NextTo
>>>   (slot room1 (type STRING))
>>>   (slot room2 (type STRING))
>>>)
>>>
>>>(deffacts fact-23
>>>   (Suite  (id "100") (rooms 3))
>>>   (Single (id "101"))
>>>   (Double (id "102"))
>>>   (Double (id "103"))
>>>
>>>   (NextTo (room1 "100")(room2 "101"))
>>>   (NextTo (room1 "101")(room2 "100"))
>>>   (NextTo (room1 "101")(room2 "102"))
>>>   (NextTo (room1 "102")(room2 "101"))
>>>   (NextTo (room1 "102")(room2 "103"))
>>>   (NextTo (room1 "103")(room2 "102"))
>>>)
>>>
>>>(reset)
>>>
>>>;;/***
>>>(defrule oneNext
>>>   "Check that a suite has exactly one neighbour."
>>>   (Suite (id ?rid))
>>>   ?sn <- (accumulate (bind ?xcount 0) (++ ?xcount) ?xcount
>>>                      (NextTo (room1 ?rid)))
>>>   (test (= ?sn 1))
>>>   =>
>>>   (printout t "===> Suite " ?rid " has " ?sn " neighbours." crlf)
>>>)
>>>;;***/
>>>
>>>;;/***
>>>(defrule maxNext
>>>   "Check that no room is next to three or more."
>>>   (Room (id ?rid))
>>>   ?nc <- (accumulate (bind ?count 0) (++ ?count) ?count
>>>                      (NextTo (room1 ?rid)))
>>>   (test (<= ?nc 2))
>>>   =>
>>>   (printout t  "---> " ?rid " has " ?nc " neighbours." crlf)
>>>)
>>>;;***/
>>>
>>>(run)
>>>
>>>
>>>--------------------------------------------------------------------
>>>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 owner-jess- [EMAIL PROTECTED]
>>>--------------------------------------------------------------------
>>
>>
>>---------------------------------------------------------
>>Ernest Friedman-Hill
>>Advanced Software Research          Phone: (925) 294-2154
>>Sandia National Labs                FAX:   (925) 294-2234
>>PO Box 969, MS 9012                 [EMAIL PROTECTED]
>>Livermore, CA 94550                 http://www.jessrules.com
>>
>>--------------------------------------------------------------------
>>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]
>>--------------------------------------------------------------------
>
>--------------------------------------------------------------------
>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