Я пытаюсь найти средний возраст людей, утверждал в семье онтология по следующему правилу JessTab:JessTab: Нахождение среднего значения
(defrule print_people_total_age
(object (https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#age ?a1))
=>
(bind ?s 0)
(bind ?num 0)
(foreach ?a (create$ ?a1) (+ ?s ?a) (++ ?num) (printout t "Total age " ?s " and average age is " (/ ?s ?num) " of persons" crlf)))
Правило компилирует хорошо, но когда активированные ошибки это:
Jess reported an error in routine +
while executing (+ ?s ?a)
while executing (foreach ?a (create$ ?a1) (+ ?s ?a) (++ ?num) (printout t "Total age " ?s " and average age is " (/ ?s ?num) " of persons" crlf))
while executing defrule MAIN::print_people_total_ageSSS
while executing (run).
Message: Not a number: "[email protected]://www.w3.org/2001/XMLSchema#integer 20".
Где я ошибаюсь?
Благодарим за быстрый ответ. Я думаю, что в вашем правиле есть синтаксическая проблема (она не запускается). Возможно, это при инициализации переменной? N. Я попытался с (bind? N 0), но не смог. – Edi
Как-то я потерял пару круглых скобок во время копирования-вставки. Теперь должно быть хорошо - это правило было проверено. – laune
Я тестирую следующую (семейную онтологию) [https://wiki.csc.calpoly.edu/OntologyTutorial/raw-attachment/wiki/AddingRuleWithJessTab/family_example_for_rules.owl] в JessTab в Protege 3.5. Правило хорошо компилируется, если я даю начальное значение от 0 до? N, но при выполнении никакого результата не создается. Я могу заметить, что на вкладке «Правила» переменная? A правила изменилась на? _20_a (1,30,0) при ее первом появлении и? _20_a во втором. – Edi