2016-04-01 9 views
0

В Джесс способ вернуть строку из правила такова:Возвращает значение из правила Джес или Drools (экспертная система)

(defrule welcome-toddlers 
"Give a special greeting to young children" 
(person {age < 3}) 
=> 
(printout t "Hello, little one!" crlf)) 

Мой вопрос, как реализовать функцию возврата, это то, что я хочу:

(defrule welcome-toddlers 
"Give a special greeting to young children" 
(person {age < 3}) 
=> 
(return "Hello, little one!")) 

если не возможно как это сделать в слюни ??

ответ

3

Правило не называется как функция - поэтому ваш вопрос не имеет смысла. Правила срабатывают, из-за того, что происходит в рабочей памяти, в некотором (по-видимому) случайном порядке - так, где должна произойти эта строка из одного из этих правил? Функция (run) (fireAllRules) просто возвращает количество правил, которые были уволены, и все.

Куда бы вы хотели получить эту строку в результате приемных детей? Необходимо выбрать способ передачи данных, которые создаются в правиле к этой точке вашего приложения. Вот несколько популярных опций:

  1. Объявить и установить глобальный, способный хранить все результаты от ваших правил. Может быть список или карта - возьмите свой выбор.
  2. Вставьте результат как факт в рабочую память. Возможно, вам нужно определить простой шаблон для хранения значения и идентификатора. Вы можете получить эти факты из кода Java-приложения, используя API.
  3. Сохраните значение в самом факте, который отвечает за запуск правила, например, добавьте слот greeting человеку и сохраните его там. (Будьте осторожны, чтобы не вызвать бесконечную петлю.)
  4. Также можно создать некоторый статический метод в классе Java, который заботится о значении и сохраняет его соответствующим образом. Вы можете назвать это из следствия («когда»).

Помимо некоторых различий в терминологии, это то же самое в Drools.

В обеих системах имеется документация, в которой вы можете найти все детали этого и других вопросов.

+0

спасибо, что посмотрели. –

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

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