Return 来自规则 jess 或 drools(专家系统)的值

Return a value from rule jess or drools (expert system)

实际上,从规则中 return 字符串的方式是这样的:

(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!"))

如果不可能的话,那怎么办呢??

规则不像函数那样被调用 - 所以你的问题没有意义。由于工作记忆中发生的事情,规则以某种(显然)随机顺序触发 - 那么来自这些规则之一的字符串应该放在哪里? (run) 函数(fireAllRules 方法)只是 returns 触发的规则数,仅此而已。

您希望将来自 welcome-toddlers 的字符串放在哪里?必须选择一种将在规则中创建的数据传递到应用程序中的那个点的方法。以下是一些受欢迎的选项:

  1. 声明并设置一个能够存储所有规则结果的全局变量。可以是列表或地图 - 随您选择。
  2. 将结果作为事实插入工作记忆中。也许您需要定义一些简单的模板来保存值和标识。您可以使用 API.
  3. 从某些 Java 应用程序代码中获取这些事实
  4. 将值存储到负责触发规则的事实中,例如,向 person 添加一个插槽 greeting 并将其存储在那里。 (注意不要死循环。)
  5. 也可以在 Java class 中设计一些静态方法来处理值并适当地存储它。您可以从结果("when" 部分)调用它。

除了术语上的一些差异外,在 Drools 中是一样的。

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