Re: [PRD] Default conflict resolution strategy (ISSUE-64)

Mark Proctor wrote:
>> 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.

Yes, it is, but I understand that this kind of binding is dealt with 
somewhat differently that the binding of an object (e.g. ?c in your 
example), in JRules: it is dealt with as if it was bound inside an 
Exists and thus, not taken into account by refaction.

It is irrelevant to the discussion whether ILOG allows binding to 
primitive datatypes or not, but it might be relevant wrt the definition 
of refraction that different variables have different roles (and must be 
dealt with differently by refraction). E.g., in Gary's initial example:

Forall ?e, ?s^^int,
if ?e[salary->?s] and ?s<10K then ?e[salary->(?s*1.1)]

if we have John[salary->1000] in the WM, the rule will fire repeatedly 
until John's salary is more than 10K, under the semantics of no-repeat 
as it was described in a previous editor's draft of PRD (and that we 
decided to remove for FPWD), because it (that semantics) considered the 
bindings of ?e and ?s as having the same role, not recognizing the fact 
that the rule could be equivalently rewritten:

Forall ?e
If (exists ?s^^int (?e[salary->?s] and ?s<10K))
then DO{(exists ?s^^int (?e[salary->?s]), Assert?e[salary->(?s*1.1)]}
(it does not work in PRD because we do not have yet a way to express 
that, but I hope that you understand what I mean).

Cheers,

Christian

Received on Tuesday, 5 August 2008 15:15:58 UTC