リファレンス restriction

ルール用語でrestrictionとよく用いられていますが、単純に条件のことね、whenのTypeの()の中で記述する部分。指定の仕方として今までのようなもの以外にも細かく分類するとこういう書き方もできるよ、というのが以下の3つ。

1.return Value Restriction
事前に変数につめた戻り値をつかって条件を記述する例

rule "parents"
    auto-focus true
    when
        Person(myAge : age, sex == 'M')
        Person(age > (myAge + 3), sex == 'F')
    then     
        System.out.println("ok");
end  

myAgeにセットした値で条件追加してます。3つ以上の女性じゃないとだめ、という例。

2.Compound Value Restriction
複数値が想定される場合にはin/not inを使えます。SQLと一緒ですね。

rule "children"
    auto-focus true
    when
        Person(lastName in ("taro","jiro"))
    then     
        System.out.println("ok");
end  

3.Multi Restriction
複数の条件を記述したい場合に用います、よくある&&もありますが、()で閉じる記述もできます。

rule "children"
    when
        Person(age > 30 && < 40)
    then     
        System.out.println("ok");
end  

と書きます。Javaとちょっと書き方が違いますね。FirstOrderLogicです。()つきで条件を追加すると

rule "children"
    when
        Person(age (( > 30 && < 40) || ( > 45 && < 50)))
    then     
        System.out.println("ok");
end  

31-39,もしくは46-49という条件になります。単純なんだけどJavaとごっちゃに作業してると最初は慣れなさそう。