JessTab: поиск самого молодого человека в семейной онтологии

Я использую [семейную онтологию][1] для проверки правил Джесса. Все работает нормально, если не манипулировать данными с помощью встроенных функций Jess, например. мин и макс. Я разработал следующее правило:

(defrule print_people_min_age 
(object  (https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#age ?a)) 
   => 
(printout t "Min age " (min ?a) crlf))

Правило компилируется хорошо, но я не получаю желаемого результата. Он выводит мне возраст каждого человека в онтологии. Я попытался поместить функцию min в LHS, но это приводит к ошибке.

[1]: Семейная онтология https://wiki.csc.calpoly.edu/OntologyTutorial/attachment/wiki/AddingRuleWithJessTab/family_example_for_rules.owl


person Edi    schedule 14.12.2014    source источник


Ответы (1)


Функции (min <numeric-expresion>+) и (max <numeric-expresion>+) предназначены для применения к нескольким аргументам — вы вызываете их только с одним аргументом. Правило срабатывает один раз для каждого объекта, и минимум этого возраста равен - этот возраст.

Это правило иллюстрирует, как найти минимум:

(defrule print_people_min_age 
(object  (https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#age ?a1))
(not (object (https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#age ?a2&:(< ?a2 ?a1))))
=> 
(printout t "Min age " ?a1 crlf))
person laune    schedule 14.12.2014
comment
Большое спасибо, но, к сожалению, это дает максимальную ценность возрастного свойства. Я изменил стрелку › на ‹, и это дало результат. Я думаю, это из-за оператора not. - person Edi; 14.12.2014
comment
Извините, но это была простая ошибка; исправлено. Не в порядке - просто то, что заставляет его работать, мин или макс. - person laune; 14.12.2014