- From: Mark Proctor <mproctor@redhat.com>
- Date: Tue, 29 Jul 2008 22:22:39 +0100
- To: Christian de Sainte Marie <csma@ilog.fr>
- CC: Gary Hallmark <gary.hallmark@oracle.com>, RIF WG <public-rif-wg@w3.org>
- Message-ID: <488F8A1F.7050509@redhat.com>
Christian de Sainte Marie wrote: > Gary Hallmark wrote: >>> >>> Mark Proctor wrote: >>>> >>>> Refaction in JRules is the same as jess/clips/drools no-loop. >> >> I'd be surprised if it is exactly the same. What do you expect from >> the following ruleset: >> >> p(1) >> q(1) >> q(2) >> (* rule1[loop->false] *) >> Do(external(print("rule1 fired, ?x=" ?x))) :- q(?x) >> (* rule2[loop->false] *) >> Do(Retract(p(1)) p(1) external(print("rule2 fired, ?x=" ?x))) :- >> And(p(1) q(?x)) > > I guess you mean: > rule1: if q(?x) then print("rule1 fired, ?x=" ?x) > rule2: if p(1) and q(?x) then Retract(p(1)), Assert(p(1)), print > ("rule2 fired, ?x=" ?x) > > Hey, Gary, this is not in the spec, you can write them rules in a way > that makes sense :-) > >> With Oracle/Jess, you get >> rule2 fired, ?x=2 >> rule1 fired, ?x=2 >> rule1 fired, ?x=1 > > With JRules, you bind only objects, so, the example does not really work. http://www.ilog.com/products/jrules/documentation/jrules67/rslangref/rs_lng_irlref79.html ?c:Customer(?p:phoneNo); Isn't phoneNo a primitive. > > But if you could bind primitive data types, (I have to check, but I > think) that you would fire rule2 with ?x=1 as well. And that is > certainly what you would get with the semantics that was described in > PRD. > >> The semantics of Oracle/Jess is that a rule's actions cannot >> re-activate that rule. Initially, because of the input data, rule1 >> and rule2 each have 2 activations. When rule2 fires, the retraction >> removes the other rule2 activation. The assert action cannot >> reactivate rule2 because of the no-loop property. > > I do not understand that. I mean, I do not understand the intended > behaviour: do you mean that p(1) after rule2 has been fired is > distinct from p(1) before, and that, somehow, the engine recognizes > the difference? Does this have to do with the assertion being logical > (and the engine tracing the origin of it)? I mean, as in a TMS: Jess > has a TMS facility, right? I have to check how we handle refraction > (or equivalent) wrt logical statements in JRules... > >> We need to carefully specify these strategies to be sure we agree >> what they are, and then we need to see what the intersection is, and >> if it is >= 1, give it an explicit name(s) (and probably not in the >> metadata as my example does). > > Absolutely agree. > > Christian > -- JBoss, a Division of Red Hat Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom. Registered in UK and Wales under Company Registration No. 3798903 Directors: Michael Cunningham (USA), Charlie Peters (USA), Matt Parsons (USA) and Brendan Lane (Ireland)
Received on Tuesday, 29 July 2008 21:32:22 UTC