よだれを独学する練習として、ブリッジ カード ゲームでのビッドのルールに取り組んでいます。ルールは互いに独立して機能します (ルールで drools.halt() を使用することによって適用されます) が、halt() 呼び出しを削除して例を拡張しようとすると、予期しない動作が発生します。以下の例では、最初のルールの halt() をコメントアウトし、size() 条件を 2 番目のルールに追加して置き換え、2 番目のルールが起動しないようにしています。最初のルールの結果がオークションのコレクションに入札を追加したため、2 番目のルールが起動するとは思わないでしょう。最初のルールに「update」または「modify」ディレクティブを明示的に追加しようとしましたが、違いはありませんでした。
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