0

よだれを独学する練習として、ブリッジ カード ゲームでのビッドのルールに取り組んでいます。ルールは互いに独立して機能します (ルールで 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
4

1 に答える 1

0

オブジェクトを変更するときは、更新したことをエンジンに伝える必要があります。update($action); を追加してみてください。最初のルールの終わりに。

于 2013-03-30T00:14:37.917 に答える