So, basically I could use evaluation such as:
Player1 ( hisage : age -> ( compare(hisage, 19, 21) ) )
or even, without the inline function:
Player1 ( hisage : age -> ( (age == 19) || (age == 21)) ) )
This is equivalent to what Matias did although he put it into dsl.
As to what is stated in documentation, it indeed suggest that man can create rule like in algebra with grouping and nesting "and"s and "or"s. From my experience it all work as long as you don't nest.
regards
John
On 11/8/06, gabriel quennesson <[EMAIL PROTECTED]
> wrote:
That's why I said It probably wasn't the answer you expected.
You could use an inline function that would compare the value and return
true if it matches one argument or the other :
when
Player1 ( hisage : age -> ( compare(hisage, 19, 21) ) )
then
doStuff();
end
function boolean compare(int age, int firstValue, int secondValue) {
if (age == firstValue)
return true;
if (age == secondValue)
return true;
return false;
}
But I must admit it is not very clean either.
Now, in drools doc section * 3.23 *it is stated you can group using
parenthesis and keywords, pretty much like you would in algebra. I
abandoned the idea though, and did the same by writing several rules.
John Cocktolstoy a écrit :
> Thanks for the answer!
> Yep, in case of String types I could use 'matches' . But what if each
> player have also field:
> int age
> and instead of names I would like to compare age of players? How to
> cope with that?
>
> As to the second idea - I think I can't just write the rule the exact
> way I did with "and" and "or" keywords. I believe it is impossible to
> nest "and"s and "or"s. Am I right? I also wasn't able to successfully
> write such a rule.
>
> regards
> John
>
> On 11/8/06, *gabriel quennesson* <[EMAIL PROTECTED]
> <mailto: [EMAIL PROTECTED]>> wrote:
>
> I'm not sure this is the answer you expect but you could do the
> following :
>
> when
>
> Player1 (name matches "Roy|Bob")
>
> Player2(name matches "Tom|Eric")
>
> ...
>
> Player11(name matches "Paulo|Ryan")
>
> then
>
> doStuff();
>
> end
>
>
>
> In some trickier cases, you could use functions to perform other
> forms of matching.
>
> Or you could just write the rule the exact way you did with "and"
> and "or" keywords, which is documented in Drools (I wasn't able to
> successfully write such a rule, though).
>
> Regards,
>
> Gabriel
>
> John Cocktolstoy a écrit :
>> Hi,
>>
>> I am new to Drools, I just read documentations and went through
>> some examples.
>> I am wondering about the following example (I spiced it up with a
>> story so it should not be boring :-) ):
>>
>> Suppose I am a football manager and trying to use Drools to
>> automate some processes.
>> I have 11 classes (these are going to be facts):
>> Player1, Player2, Player3, ..., Player11
>> One for each player of my team, each of class has one field:
>> String name
>> In run-time I will assert into working memory only one instance
>> of each class as I would like to evaluate some rules over my
>> current team.
>> Now I would like to create simple rule - I express it in
>> pseudo-language:
>>
>> when
>> ((Player1.name <http://player1.name/> == "Roy") or (
>> Player1.name <http://player1.name/> == "Bob"))
>> and
>> ((Player2.name <http://player2.name/> == "Tom") or (
>> Player2.name <http://player2.name/> == "Eric"))
>> and
>> ...
>> and
>> ((Player11.name <http://player11.name/> == "Paulo") or
>> (Player11.name <http://player11.name/> == "Ryan"))
>> then
>> do something
>>
>> Could anyone show me how to express this rule using Drools
>> without going into huge number of rules? As I understand from
>> documentation each 'or' is creating two sub-rules. Isn't that
>> limitation that makes Drools useless for football managers?
>>
>> regards
>> John
>
>
--
___________________
*Gabriel Quennesson *| CTC/I | *SEAM*
Int :* *7 906 6910 | Ext: 04 73 64 69 10
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED] >
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
