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