[rules-users] newbie question on "when" condition syntax

Richard Bremner richard.bremner.nb at googlemail.com
Fri May 2 06:37:37 EDT 2008


Hi Mike,

Thanks very much, after a few minutes of staring I think I have understood
your very well put answer!

If I understand you right, what is happening is:

Test( $y : y )

This means, WHEN there is an instance of Test, assign the value of its "y"
property to $y

AND

WHEN there is an instance of Test where it's "x" property is equal to $y + 1

THEN fire.


I think I understand that. I am going to need to do this with some pretty
complicated formulae, containing up to 8 different variables. I have a fixed
data set and need to find certain patterns in them based on the formulae. I
have most of the program figured out, my only trouble is expressing my
formulae in the correct syntax. I will try to extend this principle you have
explained to me and hope it can cope with the extra complication... unless
there would be a better way to achieve this?

I am really sorry but I am totally new to drools - but am committed to using
it on a project so I guess I'm going to get to know it pretty well :-)

I read briefly that one can define a DSL, I might look at this eventually to
build an easier mechanism for expressing my formulae - if that can be
achieved using a DSL.

Can the whole rule be defined in Groovy/Java - if so I might be easier doing
that. I have so much work to do!


many thanks

Richard



2008/5/2 Anstis, Michael (M.) <manstis1 at ford.com>:

>  Hi Richard,
>
> The "when" section matches fact (object) patterns, so your requirement
> could be written as:-
>
> when there is a Test Fact 'A' and another Test Fact 'B' where "the 'x'
> property of 'A'" equals "the 'y' property of fact 'B' plus 1" then.....
>
> This would become:-
>
> rule "Rule 1"
> when
>     Test( $y : y )
>     Test( x == ($y + 1) )
> then
>     System.out.println("Rule 1 matches");
> end
>
> By default both patterns can match the same object, so test data:-
>
> A : x = 1, y = 1
> B : x = 2, y = 1
>
> Will cause the rule to activate twice:-
>
> A and B
> B and B
>
> With kind regards,
>
> Mike
>
>  ------------------------------
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Richard Bremner
> *Sent:* 02 May 2008 08:53
> *To:* rules-users at lists.jboss.org
> *Subject:* [rules-users] newbie question on "when" condition syntax
>
> Hi,
>
> say I have a class with two fields, x and y:
>
> public class Test {
>     int x = 1;
>     int y = 2;
>
>     getters/setters...
> }
>
>
> I would like a rule which fires when y = x + 1
>
> my initial thought would be something like:
>
> rule "Rule 1"
>
>         when
>                 test : Test (y == x + 1)
>         then
>                 System.out.println("Rule 1 matches.");
>
> end
>
>
> but this is invalid syntax and I can not find any examples of such a rule.
> I'm doing my best but reading the manual etc. I'm struggling with the syntax
> here and can't figure it out.
>
> any help really appreciated!
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080502/e0a50688/attachment.html 


More information about the rules-users mailing list