[rules-dev] Decision table - Otherwise
Mark Proctor
mproctor at codehaus.org
Mon Apr 4 15:48:46 EDT 2011
On 04/04/2011 13:44, Wolfgang Laun wrote:
> Fair enough.
>
> Presumably this will only be documented with Guvnor - if at all ;-)
We do hope to eventually have excel round tripping. So OTHERWISE will
need to be treated as a special keyword there.
>
> This way it will not confuse users writing their spreadsheets
> manually, which was my primordial fear.
>
> Thanks for you patience, Michael!
> Wolfgang
>
>
> On 4 April 2011 13:35, Michael Anstis <michael.anstis at gmail.com
> <mailto:michael.anstis at gmail.com>> wrote:
>
> I've spoken to Mark about his direction on this can of works I
> fell into ;-)
>
> What has been added to Guvnor's guided decision table is the
> simple ability to add "else\otherwise" values to single field
> constraints that use literal values and either the equality or
> inequality operator. There are hooks in the code to add future
> support for other operators at the single field constraint level -
> not composite field constraint (I'm taking the implicit "and"
> between single field constraints to imply compound field
> constraints on a single pattern too). It is not pretending to be
> the much more generalised and further reaching "else\otherwise" at
> the whole rule level. For this I will wait until the underlying
> rule engine provides it "out of the box" - if ever.
>
> With kind regards,
>
> Mike
>
>
> On 1 April 2011 11:54, Wolfgang Laun <wolfgang.laun at gmail.com
> <mailto:wolfgang.laun at gmail.com>> wrote:
>
> Hello Michael,
>
> On 1 April 2011 09:01, Michael Anstis
> <michael.anstis at gmail.com <mailto:michael.anstis at gmail.com>>
> wrote:
>
> hehe, so I walked into this one with my eyes wide shut :)
>
> Given it is only possible to define implicit logical AND's
> between field constraints within a decision table and
> given it is not possible to introduce complexity with
> parenthesis, is the immediate problem domain smaller than
> the more generalised discussion surrounding "otherwise" or
> "else"?
>
> The first limitation can be overcome by converting
> multiple single field constraints on the same field to a
> single compound field constraint on the same field; thus:-
>
> r1: age > 14, age <= 28 (i.e. age > 14 && <= 28) becomes
> rx: age <= 14 || > 28
>
> I wonder whether this problem cannot simply be resolved
> with application of DeMorgan's Theorems (something I know
> a little about from studying electronics as a student
> years ago).
>
>
> Attaboy!
>
>
> Unlike some commentators I am not an expert in first order
> logic, and therefore would appreciate guidance if people
> are willing to help.
>
>
> Well, the point is that you can come up with pretty nasty
> constraints even without parentheses:
>
> a > $1 && != $2 && < $3 # implicit assumption: $1 < $2 < $3
>
> Of course, de Morgan will help you here, too, but you'll have
> to develop some hefty symbolic expression handling.
>
> If expressions E1, E2, are the combined logical expressions
> for some field from rules r1, r2,..., the "otherwise" condition is
>
> ¬ ( E1|| E2 || ... ) =
> ¬ E1 && ¬ E2 && ...
>
> and you continue to apply de Morgan's laws to all Ei.
>
> But what about the very natural constraint combination of two
> or more fields as in my age/income example?
>
> Perhaps an entirely different approach should be considered,
> too. I'm thinking of a generic mechanism, which would have to
> gain control before any rule from a certain rule table is
> executed for another fact or set of facts. Then you could
> inspect all pending activations, and whenever you have one for
> a rule without an "otherwise" in a column it should discard
> any activations for the same fact set for rules with an
> "otherwise" in that column. I think this could be done from an
> agenda listener.
>
> -W
>
>
>
>
> Thanks,
>
> Mike
>
> On 1 April 2011 07:02, Wolfgang Laun
> <wolfgang.laun at gmail.com <mailto:wolfgang.laun at gmail.com>>
> wrote:
>
> Michael,
>
> My position is that an otherwise for a single column
> is likely to
> cause trouble by misunderstandings. Especially the
> operators >, >=, <,
> <= are likely to be used to separate intervals, as in
> r1: age > 14, age <= 28
> r2: age > 28, age <= 42
>
> If you apply the proposed definition, the otherwise
> results in
> rx: age <= 14, age > 42
> which is obviously never true.
>
> You can construct similar blackouts with two different
> fields, e.g.
> r1: age > 60, income > 100000
> r2: age > 40, income > 80000
>
> You will have to do an in-depth analysis of the AST
> resulting from the
> condition definition resulting from rule table lines
> $n+2 and $n+3 in
> order to get it right.
>
> My opinion is: Don't do it unless you can do it right.
>
> Cheers
> Wolfgang
>
> PS: I could provide a definition for otherwise with
> matches and
> soundslike, but I'd rather not.
>
>
> On 31 March 2011 21:25, Michael Anstis
> <michael.anstis at gmail.com
> <mailto:michael.anstis at gmail.com>> wrote:
> > Hi,
> >
> > I'm adding support for "otherwise" to (for the time
> being) the guided
> > decision table in Guvnor.
> >
> > The idea being if you set a cell to represent
> "otherwise" the generated rule
> > is the opposite of the accumulation of the other
> cells; perhaps best
> > explained with an example:-
> >
> > Person( name == )
> > Mark
> > Kris
> > Geoffrey
> > <otherwise>
> >
> > This would generate:-
> >
> > Person(name not in ("Mark", "Kris", "Geoffrey")
> >
> > Equals is the simple example, this is my thoughts
> for the other operators we
> > might like to support:-
> >
> > != becomes "in (<list of the other cells' values)"
> > < becomes ">= the maximum value of the other cells'
> values
> >
> > For example:-
> >
> > Person ( age < )
> > 10
> > 20
> > 30
> > <otherwise>
> >
> > Person ( age >= 30 )
> >
> > <= becomes "> the maximum value of the other cells'
> values
> >> becomes "<= the minimum value of the other cells'
> values
> >>= becomes "< the minimum value of the other cells'
> values
> > "in" becomes "not in (<a list of all values
> contained in all the other
> > cells' lists of values>)"
> >
> > For example:-
> >
> > Person ( name in )
> > Jim, Jack
> > Lisa, Jane, Paul
> > <otherwise>
> >
> > Person ( name not in ("Jim", "Jack", "Lisa", "Jane",
> "Paul" ) )
> >
> > I'm not sure there is a simple solution for
> "matches" and "soundslike" but
> > welcome advice, although a possibility might be to
> create a compound field
> > constraint:-
> >
> > Person ( name soundslike )
> > Fred
> > Phil
> >
> > not Person ( name soundslike "Fred" || soundslike
> "Phil" )
> >
> >
> > Would this be considered the most suitable approach?
> >
> > Inputs and thoughts welcome.
> >
> > Thanks,
> >
> > Mike
> >
> >
> > _______________________________________________
> > rules-dev mailing list
> > rules-dev at lists.jboss.org
> <mailto:rules-dev at lists.jboss.org>
> > https://lists.jboss.org/mailman/listinfo/rules-dev
> >
> >
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> <mailto:rules-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110404/e13c1ed8/attachment-0001.html
More information about the rules-dev
mailing list