No, I don't happy with resolution:-) but I've got leaps working in exactly the same way and now it's more like rete in its certain areas. Will be checking updates in later today.
On 4/26/06, Michael Neale <[EMAIL PROTECTED]> wrote: > OK so is this resolved? > Alex are you happy with this resolution? > > > On 4/26/06, Michael Neale <[EMAIL PROTECTED] > wrote: > > > > which is what it does now, if I understand correctly. > > > > > > > > On 4/26/06, Peter Lin < [EMAIL PROTECTED]> wrote: > > > ahh ok. > > > > > > if "dishonest" is asserted and retracted, the rule engine should fire as > > > many times as the conditions are met. > > > > > > if the rule engine didn't fire as "dishonest" is asserted and retracted > over > > > time, the behavior would be incorrect. this is assuming a long running > > > process with a single rule engine. > > > > > > peter > > > > > > On 4/25/06, Alexander Bagerman <[EMAIL PROTECTED]> wrote: > > > > > > > > This is not Leaps question. My problem is that if "dishonest" fact > > > > continuously asserted and retracted it should not cause the > > > > "honestAbe" to fire more than once but what happen with current tests > > > > is that rules with no positive CEs will fire as many times as > > > > "blocking" facts are retracted. > > > > > > > > On 4/25/06, Peter Lin <[EMAIL PROTECTED] > wrote: > > > > > I'm having a hard time understanding the basic problem being > > > > address. let > > > > > me see if I understand part of it. Say I have rule > > > > > > > > > > rule honestAbe > > > > > when > > > > > Politician is in office > > > > > NOT dishonest > > > > > then > > > > > allow him to stay in office > > > > > end > > > > > > > > > > rule firePoliticians > > > > > when > > > > > there are no honest Politicians > > > > > then > > > > > fire all politicians > > > > > end > > > > > > > > > > What I'm missing is the meaning of "blocking the rule" for LEAPS. In > the > > > > > classic LEAPS approach, rules do not "block" each other in the sense > > > > that > > > > > one rule prevents another rule from firing. Miranker's LEAPS has no > > > > agenda > > > > > and executes the consequence (aka RHS) immediately. > > > > > > > > > > In the case of a NOT join, if some list of facts from the left match > a > > > > fact > > > > > on the right, it would prevent that specific combination from > > > > propogating. > > > > > If the right fact is retracted, then all matches on the left would > be > > > > > retracted and the activation removed from the agenda. In the case > of > > > > leaps, > > > > > the rule already fired, so the only thing it can do is retract the > fact. > > > > the > > > > > activation has already fired, so there's nothing to retract. I > looked > > > > at > > > > > the drools LEAP code today and it looks it's a hybrid between LEAPS > and > > > > > RETE. > > > > > > > > > > in the interest of solving the problem, the problem should be broken > > > > down > > > > > into > > > > > > > > > > 1. rules with no positive CE and only NOT CE > > > > > 2. loop / no loop > > > > > 3. if a rule should only fire once, an "exist" pattern should be > used. > > > > > > > > > > peter > > > > > > > > > > > > > > > > > > > > On 4/25/06, Alexander Bagerman < [EMAIL PROTECTED]> wrote: > > > > > > > > > > > > What I'm saying that NO "Something" is not qualified and it should > not > > > > > > matter if you now you retracted fact-1 that was blocking the rule > and > > > > > > later you retracted fact-3 that happens to block rule at that > moment - > > > > > > I'd expect rule to fire once. > > > > > > > > > > > > I'd expect rule-1 in Edson example to fire just once. Forget > logical > > > > > > assertion for a second - imagine that you assert and retract > String() > > > > > > facts. So everytime fact is retracted rule fires in current > > > > > > implementation. Rule states that it should fire when NO String() > facts > > > > > > exists and not when String() fact happen to be retracted. At least > > > > > > that is how I see it. > > > > > > > > > > > > And to Michael's point that "there is no "fire only once" in the > > > > > > contract of the rule. " What if the same rule has a "positive" > > > > > > condition in it (in addition to the "NO"). Would you expect it to > fire > > > > > > on each blocking fact retraction as well? I'd say probably not. > > > > > > > > > > > > Anyway, I think I need to do more thinking on what and how but > feel > > > > > > free to share your thought on this subject. > > > > > > > > > > > > On 4/25/06, Michael Neale < [EMAIL PROTECTED]> wrote: > > > > > > > If I understand in my pre-caffeinated state, then I think what > you > > > > are > > > > > > > saying is: > > > > > > > > > > > > > > We start off with NO "Something" in WM. > > > > > > > The rule "R" fires. > > > > > > > > > > > > > > We add "Something" to WM > > > > > > > nothing happens > > > > > > > > > > > > > > We remove "Something" from WM > > > > > > > The rule "R" fires again. ** > > > > > > > > > > > > > > Now in ReteOO ** will happen. In LEAPS it does not? > > > > > > > > > > > > > > Well, the answer is allways: WWJD: What Would Jess Do ? > > > > > > > I am thinking the ReteOO way is what I would intuitively expect, > as > > > > > > there is > > > > > > > no "fire only once" in the contract of the rule. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 4/26/06, Alexander Bagerman <[EMAIL PROTECTED]> wrote: > > > > > > > > All, > > > > > > > > While going through fixing logical assertion tests for leaps I > > > > > > > > realized that I might not be able to support behavior for > rules > > > > with > > > > > > > > no positive conditions in the way RETEOO does. Please do not > skip > > > > the > > > > > > > > rest of the email saying "that's ok, leaps is experimental" > :-) > > > > > > > > > > > > > > > > Here is an issue - loop / no loop tests rely on multiple > > > > activation of > > > > > > > > the rules that have the following structure: > > > > > > > > rule "r" > > > > > > > > when > > > > > > > > not Something > > > > > > > > then > > > > > > > > ... > > > > > > > > end > > > > > > > > > > > > > > > > You would expect this rule to fire only once but in reality > > > > (RETEOO > > > > > > > > reality) it fires first time its "when" section is valid (even > if > > > > > > > > there was not ever blocking facts) and than every time when > rule > > > > goes > > > > > > > > from "have blocking facts can not fire" to "ok, last blocking > fact > > > > is > > > > > > > > removed, I can fire now". Does it break a paradime that states > > > > that > > > > > > > > rule can fire only once on same conditions? Let's say I have > one > > > > more > > > > > > > > condition in "when" section like that: > > > > > > > > rule "r" > > > > > > > > when > > > > > > > > someFact is matching condition > > > > > > > > and not Something > > > > > > > > then > > > > > > > > ... > > > > > > > > end > > > > > > > > > > > > > > > > I would expect this rule to fire only once, even if it goes > from > > > > "have > > > > > > > > blocking facts can not fire" to "ok, last blocking fact is > > > > removed, I > > > > > > > > can fire now" multiple times assuming that someFact was not > > > > retracted. > > > > > > > > > > > > > > > > What are your thoughts on it? > > > > > > > > > > > > > > > > -Alex > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
