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