No, this doesn't do what want. Rule-1 fires when MyObj is definstance'd. This activates rule-2a which runs and asserts the first-id fact. This activates rule-2b which fires immediately. In the end all 3 rules have fired without MyObj getting modified. I don't want rule-2b to fire until MyObj is modified.

On Thursday, October 9, 2003, at 06:33 PM, [EMAIL PROTECTED] wrote:

If you can split rule-2 into two rules, you can say something like

 (defrule rule-2a
        (MyObj
                (id ?id)
                (OBJECT ?obj)
        )
        (id ?id)
        (not (first-id ?id))
 =>
        (assert (first-id ?id))
 )

 (defrule rule-2b
        (MyObj
                (id ?id)
                (OBJECT ?obj)
        )
        (exists (first-id ?id))
 =>
        (myfunction ?obj)
 )

I *think* this is equivalent to what you're trying to do.



I think David Korz wrote:
I want to have a rule that fires for a definstance when it is created
and other rules from when it is subsequently updated. The update rules
should not fire when the definstance is created, only when it is
updated. I can get a rule to first just once for a definstance but the
only way I could get a rule to fire only on updates was to use a
defquery on the RHS. Is there a better way to do this?

MyObj is the definstance for a bean with id as a property.

; Rule that runs once for a definstance.
; Assert a fact so we never do it twice.
(defrule rule-1
        (MyObj
                (id ?id)
                (OBJECT ?obj)
        )
        (not (id ?id))
=>
        (assert (id ?id))
        (myfunction1 ?obj)      
)

; Rule for updates.
(defrule rule-2
        (MyObj
                (id ?id)
                (OBJECT ?obj)
        )
        (id ?id)
=>
        (bind ?i (count-query-results find-first-id ?id))
        (if (> ?i 0) then
                (myfunction2 ?obj)
                else
                (assert (first-id ?id))
        )
)

(defquery find-first-id
        "Look for first-id fact for id"
        (declare (variables ?id))
        (first-id ?id)
)

--------------------------------------------------------------------
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]
--------------------------------------------------------------------





--------------------------------------------------------- Ernest Friedman-Hill Distributed Systems Research Phone: (925) 294-2154 Sandia National Labs FAX: (925) 294-2234 PO Box 969, MS 9012 [EMAIL PROTECTED] Livermore, CA 94550 http://herzberg.ca.sandia.gov

--------------------------------------------------------------------
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