推断不起作用

时间:2014-12-22 16:41:49

标签: drools inference

我对Drools相对较新。我有这些规则:

import models.Demarche;
declare IsMarque
 demarche : Demarche
end 

rule "Add type Marque taxe"
salience 2
no-loop true
lock-on-active true
when
    $d : Demarche( typeDemarche == "Marque" )
then
    modify($d){
        listTaxes.put(14, 1)
    }
    insert( new IsMarque( $d ) );
    System.out.println("infer marque");
end

并且:

rule "Add Marque Polynesie extention taxe"
no-loop true
lock-on-active true
when
    $d : Demarche( extPolynesie == true)
    IsMarque(demarche == $d)
then
    $d.listTaxes.put(17, 1);
    System.out.println("marque");
end



rule "Add Not Marque Polynesie extention taxe"
no-loop true
lock-on-active true
when
    $d : Demarche( extPolynesie == true)
    not(IsMarque(demarche == $d))
then

    System.out.println("not marque");
end

对于规则2或3,没有任何反应。其中一个应该是真的,但没有打印任何东西,好像无法评估传染的IsMarque。如果我评论IsMaqrue评估这是有效的,我可以看到控制台中打印的消息。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此规则需要重写为

rule "Add type Marque taxe"
when
    $d : Demarche( typeDemarche == "Marque", $t:  listTaxes)  // I AM GUESSING HERE
    not IsMarque(demarche == $d)
then
    modify($t){
        put(14, 1)
    }
    insert( new IsMarque( $d ) );
    System.out.println("infer marque");
end

如果您展示了所有内容,则不会no-loop truelock-on-active true

请注意,您可以将第一条规则也写为

rule "Add type Marque taxe"
when
    $d : Demarche( typeDemarche == "Marque")
then
    $d.getListTaxes().put(14, 1);
    insert( new IsMarque( $d ) );
    System.out.println("infer marque");
end

if(且仅当)没有其他规则作为引用listTaxes属性的CE。既然你已经使用了这个"脏更新"在规则"Add Marque Polynesie extention taxe"中,似乎没问题。

请发布完整的规则 - #1不编译。