I just checked Jess and it appears that facts bound across conditions
eliminate a cross product.

The following Jess script and associated output demonstrates.

-Mitch

(deftemplate person (slot firstName) (slot lastName) (slot age))

(printout t "--No cross product" crlf)

(defrule find-steve-30
        ?person <- (person (firstName ?name))
        ?person <- (person (age ?age&:(= ?age 30)))
=>
        (printout t "Found a guy named " ?name " who is " ?age crlf))
        
(assert (person (firstName steve)(age 22)))
(assert (person (firstName steve)(age 30)))
(assert (person (firstName bob)(age 30)))

(run)

(printout t "--With cross product" crlf)

(defrule find-anyone-30
        ?person <- (person (firstName ?name))
        (person (age ?age&:(= ?age 30)))
=>
        (printout t "Found a guy named " ?name " who is " ?age crlf))

(run)

--No cross product
Found a guy named bob who is 30
Found a guy named steve who is 30
--With cross product
Found a guy named bob who is 30
Found a guy named steve who is 30
Found a guy named bob who is 30
Found a guy named steve who is 30
Found a guy named steve who is 30
Found a guy named steve who is 30
6
-----Original Message-----
From: Peter Lin [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, April 19, 2006 11:15 AM
To: Mark Proctor
Cc: [email protected]
Subject: Re: [drools-user] Changes in RC-2 syntax

let me see if I understand the problem correctly. if I were to translate
this to JESS clips

(defrule "All Application Traffic by Org Unit Template Selection Logic"
  ?qo <- (QueryObject
            (selectApplication true)
            (orgNetObjectType true)
            (reportType "pmi_net_user")
            (reportType "REPORT_TYPE_WINDOW")
         )
=>
  (set ?go template "AppUserByOU.ftl")
)

Is that close to what you're thinking of in JESS? or were you thinking of
something different?

peter



On 4/19/06, Mark Proctor <[EMAIL PROTECTED]> wrote:
>
> In Drools 3.0 that is true of bound field variables, which is the same in
> jess. I haven't done it on Columns. If this is the case in Jess I'll look
to
> add support for it in 3.1 - but I don't see why someone would want to
> write a rule like that.
>
> Mark
> Mitch Christensen wrote:
>
> Wow, that wasn't my understanding at all.
>
> Going from my (admittedly vague) recollection from Jess, referencing the
> same fact-binding variable ('qo' in my case) across conditions means that
> the same fact instance must be used across all conditions.
>
> In other words the value of 'qo' must be equal across the rule.
>
> I agree that without fact-binding a cross product would result, but I
> thought that the fact/pattern binding eliminated this.
>
> -Mitch
>
> -----Original Message-----
> From: Mark Proctor [mailto:[EMAIL PROTECTED] <[EMAIL PROTECTED]>]
> Sent: Wednesday, April 19, 2006 10:43 AM
> To: [email protected]
> Subject: Re: [drools-user] Changes in RC-2 syntax
>
> Thats a reallly really really bad rule - unless I misunderstand what you
> are doing. you are creating a cross product of 16 with that, although we
> now remove instance equals cross product. So that means you would have
> to assert 4 QueryObjects for this to work. If it was working before
> thats because the rule was firing repeatedly for the same object and
> doing the same set, so you weren't noticing.
>
> To understand what I mean try this in RC1 and RC2 in the audit view and
> you will understand the difference.
>
>
> Mitch Christensen wrote:
>
>  The following used to work in previous versions (though I'm not sure
>
>  which),
>
>
>
> rule "All Application Traffic by Org Unit Template Selection Logic"
>
>       when
>
>             qo : QueryObject(selectApplication == true)
>
>             qo : QueryObject(selectUser == true)
>
>             qo : QueryObject(orgNetObjectType == ObjectType.pmi_net_user)
>
>             qo : QueryObject(reportType == Constants.REPORT_TYPE_WINDOW)
>
>       then
>
>             qo.setTemplate("AppUserByOU.ftl");
>
> end
>
>
>
> But when I upgraded to RC-2 in order to get it to fire I needed to change
>
>  it
>
>  to this,
>
>
>
> rule "All Application Traffic by Org Unit Template Selection Logic"
>
>       when
>
>             qo : QueryObject(selectApplication == true,
>
>                                      selectUser == true,
>
>                                      orgNetObjectType ==
> ObjectType.pmi_net_user,
>
>                                      reportType ==
> Constants.REPORT_TYPE_WINDOW)
>
>       then
>
>             qo.setTemplate("AppUserByOU.ftl");
>
> end
>
>
>
> Which is fine, I understand that the latter is completely resolved within
> the alpha/pattern network, but what impact will it have on my ability to
> define DSL?  It seems the former would lend itself to a more
>
>  straightforward
>
>  DSL implementation.
>
>
>
> Also, it seems that the former should still be valid, though less
>
>  efficient.
>
>
>
> -Mitch
>
>
>
>
>
>
>
>

Reply via email to