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

Reply via email to