On 07.12.2000, Thomas Barnekow wrote:
>Hi!
>
>>  this may seem a trivial problem, but I hope you can help out.
>>  As far as I understood, the general way to describe production rules
>>  is like this:
>>
>>  a and b and c ... => execute x
>>
>>   From what I have understood about RETE there is no efficiency problem
>>  in defining a second rule, if the negation of some fact is used:
>>
>>  a and b and not c ... => execute x
>>
>>  because this will be just a second branch to the rule above. However,
>>  if c contains e.g. a method call to java, the method is called twice,
>>  right?
>
>That's right!
>
>>  At the moment I solve this by producing a fact containing the result
>>  of the method and then have two rules working on this fact expressing
>>  both branches. But this seems rather inelegant and inefficient. Can
>>  anybody enlighten me?
>
>Let's say you have three patterns (a), (b), and (c), where (c) is 
>actually (test (java-method-call)). Then you can also write
>
>(defrule my-rule
>       (a)
>       (b)
>       =>
>       (if (java-method-call) then
>               (execute-then-case)
>       else
>               (execute-else-case)))
>
>Usually, you should avoid having if-then-else constructs on the RHS 
>that do the work of the pattern matcher. But in this case, it should 
>be more efficient.

Thanks, I had not thought of this possibility. I changed my code and 
it works fine!

Cheers,

Michael
-- 
Multi-Agent Systems Group at Saarland University
http://www.virtosphere.de/schillo   Fon: +49 681 302 4578
[EMAIL PROTECTED] is a moderated forum for DAI research in Germany.
To subscribe, please send an  e-mail to [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]
---------------------------------------------------------------------

Reply via email to