<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
On 04/04/2011 13:44, Wolfgang Laun wrote:
<blockquote
cite="mid:BANLkTikhrxgJ0ixNb0xenO8beN+3nPn9hg@mail.gmail.com"
type="cite">Fair enough.<br>
<br>
Presumably this will only be documented with Guvnor - if at all
;-)<br>
</blockquote>
We do hope to eventually have excel round tripping. So OTHERWISE
will need to be treated as a special keyword there.<br>
<blockquote
cite="mid:BANLkTikhrxgJ0ixNb0xenO8beN+3nPn9hg@mail.gmail.com"
type="cite"><br>
This way it will not confuse users writing their spreadsheets
manually, which was my primordial fear.<br>
<br>
Thanks for you patience, Michael!<br>
Wolfgang<br>
<br>
<br>
<div class="gmail_quote">On 4 April 2011 13:35, Michael Anstis <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:michael.anstis@gmail.com">michael.anstis@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid
rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left:
1ex;">
I've spoken to Mark about his direction on this can of works I
fell into ;-)<br>
<br>
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.<br>
<br>
With kind regards,<br>
<br>
Mike
<div>
<div class="h5"><br>
<br>
<div class="gmail_quote">On 1 April 2011 11:54, Wolfgang
Laun <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:wolfgang.laun@gmail.com"
target="_blank">wolfgang.laun@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px
solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex;
padding-left: 1ex;">
Hello Michael,<br>
<br>
<div class="gmail_quote">
<div>On 1 April 2011 09:01, Michael Anstis <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:michael.anstis@gmail.com"
target="_blank">michael.anstis@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204,
204); margin: 0pt 0pt 0pt 0.8ex; padding-left:
1ex;">
hehe, so I walked into this one with my eyes
wide shut :)<br>
<br>
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"?<br>
<br>
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:-<br>
<br>
r1: age > 14, age <= 28 (i.e. age >
14 && <= 28) becomes<br>
rx: age <= 14 || > 28<br>
<br>
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).<br>
</blockquote>
</div>
<div><br>
Attaboy!<br>
</div>
<div>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204,
204); margin: 0pt 0pt 0pt 0.8ex; padding-left:
1ex;">
<br>
Unlike some commentators I am not an expert in
first order logic, and therefore would
appreciate guidance if people are willing to
help.<br>
</blockquote>
</div>
<div><br>
Well, the point is that you can come up with
pretty nasty constraints even without parentheses:<br>
<br>
a > $1 && != $2 && <
$3 # implicit assumption: $1 < $2 < $3<br>
<br>
Of course, de Morgan will help you here, too, but
you'll have to develop some hefty symbolic
expression handling.<br>
<br>
If expressions E<font size="1">1<font size="2">, E<font
size="1">2<font size="2">, are the combined
logical expressions for some field from
rules r1, r2,..., the "otherwise"
condition is<br>
<br>
¬ ( </font></font></font></font>E<font
size="1">1<font size="2"> || E<font size="1">2</font></font></font>
|| ... ) =<br>
<font size="1"><font size="2"><font size="1"><font
size="2">¬ </font></font></font></font>E<font
size="1">1 && </font><font size="1"><font
size="2"><font size="1"><font size="2">¬ </font></font></font></font><font
size="1"><font size="2">E<font size="1">2
&& ...<br>
<font size="2"><br>
and you continue to apply de Morgan's laws
to all E<font size="1">i<font size="2">.<br>
</font></font></font></font></font></font><br>
<font size="1"><font size="2"><font size="1"><font
size="2"><font size="1"><font size="2">But
what about the very natural constraint
combination of two or more fields as
in my age/income example?<br>
<br>
</font></font></font></font></font></font><font
size="1"><font size="2"><font size="1"><font
size="2"><font size="1"><font size="2">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.<br>
<br>
-W<br>
<br>
</font></font></font></font></font></font><br>
<br>
</div>
<div>
<div>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204,
204); margin: 0pt 0pt 0pt 0.8ex; padding-left:
1ex;">
<br>
Thanks,<br>
<br>
Mike<br>
<br>
<div class="gmail_quote">On 1 April 2011
07:02, Wolfgang Laun <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:wolfgang.laun@gmail.com"
target="_blank">wolfgang.laun@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204,
204, 204); margin: 0pt 0pt 0pt 0.8ex;
padding-left: 1ex;">
Michael,<br>
<br>
My position is that an otherwise for a
single column is likely to<br>
cause trouble by misunderstandings.
Especially the operators >, >=,
<,<br>
<= are likely to be used to separate
intervals, as in<br>
r1: age > 14, age <= 28<br>
r2: age > 28, age <= 42<br>
<br>
If you apply the proposed definition, the
otherwise results in<br>
rx: age <= 14, age > 42<br>
which is obviously never true.<br>
<br>
You can construct similar blackouts with
two different fields, e.g.<br>
r1: age > 60, income > 100000<br>
r2: age > 40, income > 80000<br>
<br>
You will have to do an in-depth analysis
of the AST resulting from the<br>
condition definition resulting from rule
table lines $n+2 and $n+3 in<br>
order to get it right.<br>
<br>
My opinion is: Don't do it unless you can
do it right.<br>
<br>
Cheers<br>
<font color="#888888">Wolfgang<br>
</font><br>
PS: I could provide a definition for
otherwise with matches and<br>
soundslike, but I'd rather not.<br>
<div>
<div><br>
<br>
On 31 March 2011 21:25, Michael Anstis
<<a moz-do-not-send="true"
href="mailto:michael.anstis@gmail.com"
target="_blank">michael.anstis@gmail.com</a>>
wrote:<br>
> Hi,<br>
><br>
> I'm adding support for
"otherwise" to (for the time being)
the guided<br>
> decision table in Guvnor.<br>
><br>
> The idea being if you set a cell
to represent "otherwise" the generated
rule<br>
> is the opposite of the
accumulation of the other cells;
perhaps best<br>
> explained with an example:-<br>
><br>
> Person( name == )<br>
> Mark<br>
> Kris<br>
> Geoffrey<br>
> <otherwise><br>
><br>
> This would generate:-<br>
><br>
> Person(name not in ("Mark",
"Kris", "Geoffrey")<br>
><br>
> Equals is the simple example,
this is my thoughts for the other
operators we<br>
> might like to support:-<br>
><br>
> != becomes "in (<list of the
other cells' values)"<br>
> < becomes ">= the maximum
value of the other cells' values<br>
><br>
> For example:-<br>
><br>
> Person ( age < )<br>
> 10<br>
> 20<br>
> 30<br>
> <otherwise><br>
><br>
> Person ( age >= 30 )<br>
><br>
> <= becomes "> the maximum
value of the other cells' values<br>
>> becomes "<= the minimum
value of the other cells' values<br>
>>= becomes "< the minimum
value of the other cells' values<br>
> "in" becomes "not in (<a list
of all values contained in all the
other<br>
> cells' lists of values>)"<br>
><br>
> For example:-<br>
><br>
> Person ( name in )<br>
> Jim, Jack<br>
> Lisa, Jane, Paul<br>
> <otherwise><br>
><br>
> Person ( name not in ("Jim",
"Jack", "Lisa", "Jane", "Paul" ) )<br>
><br>
> I'm not sure there is a simple
solution for "matches" and
"soundslike" but<br>
> welcome advice, although a
possibility might be to create a
compound field<br>
> constraint:-<br>
><br>
> Person ( name soundslike )<br>
> Fred<br>
> Phil<br>
><br>
> not Person ( name soundslike
"Fred" || soundslike "Phil" )<br>
><br>
><br>
> Would this be considered the most
suitable approach?<br>
><br>
> Inputs and thoughts welcome.<br>
><br>
> Thanks,<br>
><br>
> Mike<br>
><br>
><br>
</div>
</div>
<div>
<div>>
_______________________________________________<br>
> rules-dev mailing list<br>
> <a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org"
target="_blank">rules-dev@lists.jboss.org</a><br>
> <a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
><br>
><br>
_______________________________________________<br>
rules-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org"
target="_blank">rules-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div>
</div>
</blockquote>
</div>
<br>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org"
target="_blank">rules-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
</blockquote>
</div>
</div>
</div>
<br>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org"
target="_blank">rules-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
</blockquote>
</div>
<br>
<pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
rules-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>