2015-05-13 3 views
0

Я хотел бы найти детей Боба в семейной онтологии, используя Джесс. Следующее правило должно это сделать:Странное поведение в Jess

(defrule FindBobChildren 
    (object (is-a https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Person) 
      (OBJECT ?oi) 
      (https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#hasParent 
      ?b&:(eq (instance-name ?b) (instance-name https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Bob))) 
    ) 
=> 
    (printout t "Bob children:" (instance-name ?oi) crlf) 
) 

Но, к сожалению, он распечатывает только детей, у которых в качестве родителя есть только Боб. Например, если у человека есть Боб и Мэри в качестве его родителей, то это не будет соответствовать правилу.

ответ

0

Не знаю, как определяется шаблон #Person, это затрудняет, но из описанного вами поведения я делаю вывод, что #hasParent - это мультислот. Поэтому используйте это:

(defrule FindBobChildren 
    (object (is-a #Person) 
     (OBJECT ?oi) 
     (#hasParent $? ?b&:(eq (instance-name ?b)(instance-name #Bob)) $? 
     ) 
    ) 
=> 
    (printout t "Bob children:" (instance-name ?oi) crlf) 
) 
+0

Это работает. Thnx. – Edi

 Смежные вопросы

  • Нет связанных вопросов^_^