Got it.  Thanks!

-- Mike
____________________

Michael Stopper
Systems Development Scientist
SPS Enterprise Architect
CACI Transformation Solutions Group

Tel 703.460.1845
Mobile 703.407.7058
[EMAIL PROTECTED]  | www.caci.com





"Orchard, Bob" <[EMAIL PROTECTED]> 
Sent by: [EMAIL PROTECTED]
05/08/2007 10:28 AM
Please respond to
[email protected]


To
[email protected]
cc

Subject
RE: JESS: Fire a rule when multiple conditions NOT true






As you've shown the second reset is causing an issue. The reset removes 
all facts and asserts the
initial-fact and any facts that have been defined in your deffacts list 
(none in this case).
So it still works correctly.
 
If you were to list the facts at the end of the 2nd example you'd see that 
only the initial fact
remains ... so the rule fires.
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On 
Behalf Of Mike Stopper
Sent: Monday, May 07, 2007 11:38 PM
To: [email protected]
Cc: [EMAIL PROTECTED]
Subject: Re: JESS: Fire a rule when multiple conditions NOT true


OK, I believe I traced it down to an extra "reset" prior to run.  My 
original tests had a number of different clp files being batched and I'm 
guessing there was a spurious reset in there somewhere.  The negative case 
seems to work now that I've reduced the test to just these scripts; but if 
I actually have the B/D assertions in there, the extra reset incorrectly 
causes the not-present rule to fire.  So what exactly is the reset doing 
that causes the LHS to evaluate to true in those cases?? 

============= 
works 
============= 
(watch all) 
(reset) 
(assert (value "Aa")) 
(assert (value "Bb")) 
(assert (value "Cc")) 
(assert (value "Dd")) 

(defrule only-when-starts-with-B-and-D-NOT-present 
       (not (value /B.*/)) 
       (not (value /D.*/)) 
       => 
       (printout t crlf "B* and D* NOT present" crlf) 
  
) 
;;(reset) 
(run) 

 ==> Focus MAIN 
 ==> f-0 (MAIN::initial-fact) 
 ==> f-1 (MAIN::value "Aa") 
 ==> f-2 (MAIN::value "Bb") 
 ==> f-3 (MAIN::value "Cc") 
 ==> f-4 (MAIN::value "Dd") 
==> Activation: MAIN::only-when-starts-with-B-and-D-NOT-present :  f-0,, 
<== Activation: MAIN::only-when-starts-with-B-and-D-NOT-present :  f-0,, 
MAIN::only-when-starts-with-B-and-D-NOT-present: +1+1+1+1+1+2+1+2+t 
 <== Focus MAIN 





elapsed time = 235 millis 

=================== 
doesn't work 
=================== 

(watch all) 
(reset) 
(assert (value "Aa")) 
(assert (value "Bb")) 
(assert (value "Cc")) 
(assert (value "Dd")) 

(defrule only-when-starts-with-B-and-D-NOT-present 
       (not (value /B.*/)) 
       (not (value /D.*/)) 
       => 
       (printout t crlf "B* and D* NOT present" crlf) 
  
) 
(reset) 
(run) 

 ==> Focus MAIN 
 ==> f-0 (MAIN::initial-fact) 
 ==> f-1 (MAIN::value "Aa") 
 ==> f-2 (MAIN::value "Bb") 
 ==> f-3 (MAIN::value "Cc") 
 ==> f-4 (MAIN::value "Dd") 
==> Activation: MAIN::only-when-starts-with-B-and-D-NOT-present :  f-0,, 
<== Activation: MAIN::only-when-starts-with-B-and-D-NOT-present :  f-0,, 
MAIN::only-when-starts-with-B-and-D-NOT-present: +1+1+1+1+1+2+1+2+t 
 ==> Focus MAIN 
 ==> f-0 (MAIN::initial-fact) 
==> Activation: MAIN::only-when-starts-with-B-and-D-NOT-present :  f-0,, 
FIRE 1 MAIN::only-when-starts-with-B-and-D-NOT-present f-0,, 

B* and D* NOT present 
 <== Focus MAIN 





elapsed time = 234 millis

-- Mike
____________________

Michael Stopper
Systems Development Scientist
SPS Enterprise Architect
CACI Transformation Solutions Group

Tel 703.460.1845
Mobile 703.407.7058
[EMAIL PROTECTED]  | www.caci.com




"Ernest Friedman-Hill" <[EMAIL PROTECTED]> 
Sent by: [EMAIL PROTECTED] 
05/07/2007 11:16 PM 

Please respond to
[email protected]



To
[email protected] 
cc

Subject
Re: JESS: Fire a rule when multiple conditions NOT true








Well, what we have here, I suspect, is a failure to communicate. Here is 
an actual transcript of a Jess command prompt session. Do you see 
something different? If so, show us *exactly* what you typed, starting 
with launching Jess. 

[EMAIL PROTECTED] ~]$ java jess.Main

Jess, the Rule Engine for the Java Platform
Copyright (C) 2006 Sandia Corporation
Jess Version 7.0p1 12/21/2006

Jess>  (reset)
TRUE
Jess> (assert (value "Aa")) 
<Fact-1>
Jess>
Jess> (assert (value "Cc"))
Jess>
Jess> <Fact-2>
Jess> (defrule only-when-starts-with-B-and-D-NOT-present
      (not (value /B.*/))
      (not (value /D.*/)) 
      =>
      (printout t "B* and D* NOT present" crlf)
)
TRUE
Jess> (run)
B* and D* NOT present
1
Jess> (reset)
TRUE
Jess>  (assert (value "Aa"))
<Fact-1> 
Jess> (assert (value "Bb"))
<Fact-2>
Jess> (assert (value "Cc"))
<Fact-3>
Jess> (run)
0
Jess> (retract 2)
TRUE
Jess> (run)
B* and D* NOT present 
1
Jess> 

On 5/7/07, Mike Stopper <[EMAIL PROTECTED]> wrote: 

Hmm. That doesn't seem to do it: 

f-10   (MAIN::value "aa") 
f-11   (MAIN::value "Bb") 
f-12   (MAIN::value "cc") 
f-13   (MAIN::value "Dd") 
f-14   (MAIN::value "ee") 

still yields 
B* and D* NOT present 

as does 
f-10   (MAIN::value "aa") 
f-11   (MAIN::value "cc") 
f-12   (MAIN::value "ee") 


which actually prints it out twice!! 

B* and D* NOT present 
B* and D* NOT present 


This is version 7.0p1 if that makes any difference. 

-- Mike
____________________

Michael Stopper
Systems Development Scientist
SPS Enterprise Architect
CACI Transformation Solutions Group

Tel 703.460.1845
Mobile 703.407.7058
[EMAIL PROTECTED]  | www.caci.com



"Ernest Friedman-Hill" <[EMAIL PROTECTED]> 
Sent by: [EMAIL PROTECTED] 
05/07/2007 05:03 PM 

Please respond to
[email protected]



To
[email protected] 
cc

Subject
Re: JESS: Fire a rule when multiple conditions NOT true










This should do just what you want:

(defrule only-when-starts-with-B-and-D-NOT-present 
      (not (value /B.*/))
      (not (value /D.*/))
      =>
      (printout t "B* and D* NOT present" crlf)
)

This rule has two conditions: that there are no B* facts, and that there 
are 
no D* facts. Both must be met for the rule to fire.


On Monday 07 May 2007 4:04:59 pm Mike Stopper wrote:
> I'm having trouble getting my head set straight on this one..
>
> I'd like to be able to have a rule fire if two or more facts are NOT 
true
> using regular expressions, but can't seem to figure out the right rule
> def.
>
> Given the following setup:
>
> (assert (value "aa"))
> (assert (value "Bb"))
> (assert (value "cc"))
> (assert (value "Dd"))
> (assert (value "ee"))
>
> (defrule only-when-starts-with-B-and-D-present
>         (value /B.*/)
>         (value /D.*/)
>         =>
>         (printout t "B* and D* present" crlf)
> )
>
> yields
>
> B* and D* present
>
>
> but I can't seem to figure out how to get this one to work such that the
> RHS is fired only when no fact starts with either /B.*/ or /D.*/ regular
> expressions...
>
> (assert (value "aa"))
> ;;(assert (value "Bb"))
> (assert (value "cc"))
> ;;(assert (value "Dd"))
> (assert (value "ee"))
>
> (defrule only-when-starts-with-B-and-D-NOT-present
>
>         (value /(?!B).*/)
>         (value /(?!D).*/)
>         =>
>         (printout t "B* and D* NOT present" crlf)
> )
>
> fires whether or not B and D are present or not.
>
> I've tried various incarnations of the tests, using a Jess "not"
> condition, various flavors of regex expressions, all to no avail.  Can
> anyone tell me what I'm doing wrong?? Is it a misuse of facts/rules, or 
a
> misunderstanding of just what the LHS can do?
>
> Thanks.
>
>
> -- Mike
> ____________________
>
> Michael Stopper
> Systems Development Scientist
> SPS Enterprise Architect
> CACI Transformation Solutions Group
>
> Tel 703.460.1845
> Mobile 703.407.7058
> [EMAIL PROTECTED]  | www.caci.com



-- 
---------------------------------------------------------
Ernest Friedman-Hill
Advanced Software Research          Phone: (925) 294-2154
Sandia National Labs                FAX:   (925) 294-2234
PO Box 969, MS 9012                 [EMAIL PROTECTED]
Livermore, CA 94550                 http://www.jessrules.com

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