我的规则使用的事实是聚合其他对象。我想解决的问题是最小值和最大值链。找到具有最高平均iq和最低年龄的人群(这些是事实)和...以及和......各种其他标准。
请看下面的规则,如果我还有2-3个这样的标准,LHS将变得不可读。
我怎样才能做得更好?
规则"找到平均iq最高且平均年龄最低的组#34; 当
$options: PeopleGroup(
$averageIq : getAverageIg(this),
$averagAge : getAverageAge(this),
)
not ( PeopleGroup(getAverageIg(this) > $averageIq )
or PeopleGroup(getAverageIg(this) == $averageIq, getAverageAge(this) < $averagAge )
)
然后
//将PeopletGroup添加到结果
端。
由于
答案 0 :(得分:0)
您对问题的描述过于模糊,但无论如何我都会讨论您的几个选项。
首先,如果您正在寻找&#34;最好的团体&#34;您应该定义方法PeopleGroup.compareTo( PeopleGroup pg )
,以便PeopleGroup
实现Comparable<PeopleGroup>
。找到最佳组的规则应该很简单。 (当然,您可以选择编写任意数量的静态方法,比较两个PeopleGroup对象,以获得您可能想到的任何排名。)无论如何,规则将非常简单。
rule "best group"
when
$pg1: PeopleGroup()
not PeopleGroup( this.compareTo( $pg1 ) > 0 )
then
// $pg1 is best PeopleGroup
end
另一种方法是通过收回不合格的事实或通过标记它们来过滤事实。因此,在第一遍中,您将收回没有最大IQ的任何组。接下来,您取消任何没有最低年龄的剩余群体的资格。您需要使用议程组或突出或控制订单的其他逻辑来订购规则。但个别规则很简单。