Использование целочисленного слота в Protege в правиле Джесса

Я написал следующее правило Джесса, чтобы использовать его в онтологии 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.

Однако рассматриваемый слот является целым числом, поэтому мне непонятно, почему Джесс рассматривает его как строку. Любая помощь?


person Jsevillamol    schedule 07.04.2018    source источник


Ответы (1)


Проблема здесь:

(test (> n 4))

Ссылка на связанную переменную сохраняет '?', поэтому вам нужно написать

(test (> ?n 4))

Однако было бы лучше добавить это ограничение в (n_miembros_familia ?n).

(n_miembros_familia ?n&:(> ?n 4))
person laune    schedule 07.04.2018