リファレンス accumulate -1
これも同様にfromとあわせて使います、accumulate(蓄積)してその結果を使って何かをするときに便利です。標準のaccumulate用のfunctionも用意されているので簡単なsum functionを使ったサンプルをば.エレベータの体重制限のルール例です(デブネタばかりですいません)
ルールはこう書きます。
rule "You guys over!!" when $sum : Number( intValue >= 509 ) from accumulate( Person( $weight : weight ), sum( $weight ) ); then System.out.println( "you guys over =, " + $sum ); end
上記例でいえば、workingMemoryにいるPersonの体重を合計していって、その結果509を超えた場合、体重制限オーバーですよ、というルールです。他にもaverage,min max,countといった、ルールを書くときにもよくお目にかかれるキーワードがデフォルトで用意されています。他にも以下のように細かい指定を行い制御することもaccumulateでは可能です。
from accumulate( $cheese : Cheese( type == $likes ), init( Cheesery cheesery = new Cheesery();), #ルールマッチング時の最初に1回行う処理を記述 action( cheesery.addCheese( $cheese ); ), #行いたい処理 reverse( cheesery.removeCheese( $cheese );), #マッチングしなかったときにしたい処理 result( cheesery ) ); #返したい情報
といった感じです。ちなみにjava dialect例です。