作为自学流口水的练习,我正在研究桥牌游戏中的竞标规则。规则彼此独立工作(通过在规则中使用 drools.halt() 强制执行)但是当我尝试通过删除 halt() 调用来扩展示例时,我得到了我没想到的行为。在下面的示例中,我将注释掉第一条规则中的 halt(),并将 size() 条件添加到第二条规则以替换它,以防止触发第二条规则。我不希望第二条规则触发,因为第一条规则的结果为拍卖的集合增加了一个出价,因此随后在规则 2 中计数不应该为零。我尝试在第一条规则中明确添加“更新”或“修改”指令,但这没有任何区别。
rule "rule1"
salience 100
when
$auction : Auction( $currentBidder : currentBidder != null )
$hand : Hand( owner.equals($currentBidder), getTotalPoints(getLongestSuit()) >= 13 )
then
$auction.bid($currentBidder, new Bid(1, $hand.getLongestSuit()));
//drools.halt();
end
rule "rule2"
salience 1
when
$auction : Auction( $currentBidder : currentBidder != null, getPlayerBids().size() == 0 )
Hand(owner.equals($currentBidder))
then
$auction.bid($currentBidder, new Pass());
drools.halt();
end