Haven't tried Version 5 yet... this is certainly a handy addition to Jess.
However, it deals with only fields within one type of fact at a time, i.e.
the single field in the 'foo' fact. In order to match a foo fact with its
field odd less than 100, or 0 _OR_ a 'bar' fact with the same conditions, I
believe you still need two rules.
______________________________
Lewis Hart 703-506-5938
-----Original Message-----
From: Benjamin Good [mailto:[EMAIL PROTECTED]]
Sent: Monday, July 19, 1999 5:33 PM
To: Message UK
Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: JESS: OR and AND in rules
Actually, as of the 5.0a6 release, you can now use 'or' on the LHS of
your rules. See the latest version of the documentation where it says
"Ampersands (&) represent logical "and", while pipes (|) represent
logical "or." & has a higher precedence than |, so that the following
(foo ?X&:(oddp ?X)&:(< ?X 100)|0)
matches a foo fact with a single field containing either an odd number
less than 100, or 0."
If you use this rule
(defrule a-rule
(foo ?X&:(oddp ?X)&:(< ?X 100)|0)
=> (printout t "or works now" crlf))
it works as it says.
Hope that helps,
Benjamin Good
True Image Inc.
Message UK wrote:
>
> Thanks for your help Lewis. Seems a shame not to be able to do an OR
inside
> one rule though. Would save space!
>
> Debbie Lampon
>
> >
> >You are correct, the patterns in the LHS of a rule are treated as being
> >ANDed together. To create an OR condition, you could use two or more
> >separate rules. Instead of:
> >
> >Jess> (defrule cantDoThis (test (or (this ?) (that ?))) => (assert
> >(thisandThat)))
> >Rete Exception in routine ReteCompiler::eval.
> > Message: Unbound variable found in funcall: _blank_2 at line 1: (
> >defrule cnatDoThis ( test ( or ( this ?_blank_2 ) ( that ?_blank_3 ) ) )
=
> > >
> >( assert ( tat ) ) ) .
> > at java.lang.Throwable.fillInStackTrace(Native Method)
> > at java.lang.Throwable.fillInStackTrace(Compiled Code)
> > at java.lang.Throwable.<init>(Compiled Code)
> > ....
> >Jess> (assert (this Z))
> ><Fact-0>
> >Jess> (assert (that V))
> ><Fact-1>
> >Jess> (facts)
> >f-0 (this Z)
> >f-1 (that V)
> >For a total of 2 facts.
> >TRUE
> >Jess> (defrule thisRule (this ?) => (assert (thisandThat)))
> >TRUE
> >Jess> (defrule thatRule (that ?) => (assert (thisandThat)))
> >TRUE
> >Jess> (run)
> >TRUE
> >Jess> (facts)
> >f-0 (this Z)
> >f-1 (that V)
> >f-2 (thisandThat)
> >For a total of 3 facts.
> >TRUE
> >Jess>
> >Opinions are strictly those of the author and
> >do not necessarily reflect those of GRCI.
> >____________________________________________
> >Lewis Hart GRC International
> >703-506-5938 1900 Gallows Rd
> >[EMAIL PROTECTED] Vienna, VA 22182
> >
>
> ______________________________________________________
> Get Your Private, Free Email at http://www.hotmail.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]
> ---------------------------------------------------------------------
---------------------------------------------------------------------
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]
---------------------------------------------------------------------
---------------------------------------------------------------------
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]
---------------------------------------------------------------------