(and) does a short-circuited evaluation of its operands, but it is still a single CE. Whether it returns false due to the first or second operand does not matter: it'll have to be reevaluated over and over again.
Using two boolean functions in two different CEs may result in less invocations of these functions since a "true" result of the first CE is not lost. Wolfgang On 18 July 2011 17:00, Skeptic . <skeptic2...@hotmail.com> wrote: > Hi, > > Is there a good reason why a rule like this : > > (defrule r1 > [...] > (test (and (time-varying call1) (time-varying call2)) > => > [...]) > > behave differently than one like this : > > (defrule r1b > [...] > (test (time-varying call1)) > (test (time-varying call2)) > => > [...]) > > Thanks ! >