Использование целого слота в Protege в правиле 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,

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

1 ответ

Решение

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

(test (> n 4))

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

(test (> ?n 4))

Тем не менее, может быть, лучше добавить это ограничение в (n_miembros_familia ?n),

(n_miembros_familia ?n&:(> ?n 4))
Другие вопросы по тегам