在Jess规则

时间:2018-04-07 16:34:20

标签: protege jess

我编写了以下Jess规则,以便在Protege本体中使用它。

(mapclass Cliente)
(defrule perfil-familia-numerosa

    ?cliente <- (object (is-a Cliente) 
        (nombre ?name) 
        (discapacidad? ?discapacity)
        (distrito_deseado ?desired_district)
        (n_miembros_familia ?n)
        (presupuesto_maximo ?max)
        (presupuesto_minimo ?min))
    (test (> n 4))
    =>
    (assert (perfil-cliente ?name soltero)))

当我尝试在Jess选项卡中输入它时,我收到类型错误Jess reported an error in routine > [...] java.lang.Integer cannot be cast to java.lang.String

但是,有问题的插槽是一个整数,所以我不清楚为什么Jess将它视为一个字符串。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

问题在于:

(test (> n 4))

对绑定变量的引用会保留'?',因此您必须编写

(test (> ?n 4))

但是,将此约束添加到(n_miembros_familia ?n)

可能更好
(n_miembros_familia ?n&:(> ?n 4))