从规则jess或drools(专家系统)返回一个值

时间:2016-04-01 13:38:05

标签: java drools rule-engine expert-system jess

在jess中,从规则返回字符串的方式就是:

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

我的问题是如何实现return函数,这就是我想要的:

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

如果不可能,怎么做drools?

1 个答案:

答案 0 :(得分:4)

规则不像函数一样被调用 - 所以你的问题没有意义。由于工作记忆中发生的事情,规则会以某种(显然)随机顺序触发 - 所以那些规则中的字符串应该去哪里? (run)函数(fireAllRules方法)只返回已触发的规则数量,以及那些规则。

你想从欢迎幼儿那里得到那个字符串?必须选择一种方法,即将在规则中创建的数据传递到应用程序中的该点。这里有一些受欢迎的选项:

  1. 声明并设置一个能够存储规则中所有结果的全局。可以是列表或地图 - 请选择。
  2. 将结果作为事实插入工作记忆中。也许您需要定义一些简单的模板来保存值和标识。您可以使用API​​从某些Java应用程序代码中获取这些事实。
  3. 将值存储到负责触发规则的事实中,例如,向人员添加一个插槽greeting并将其存储在那里。 (注意不要造成无休止的循环。)
  4. 也可以在Java类中设计一些静态方法来处理值并适当地存储它。你可以从后果中调用它(&#34;当&#34;部分时)。
  5. 除了术语上的一些不同之外,它在Drools中也是一样的。

    两个系统都有文档,您可以在其中找到此问题和其他问题的所有详细信息。