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

Java 从规则jess或drools(专家系统)返回值,java,drools,rule-engine,expert-system,jess,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)) 我的问题是如何实现返回函数,这是我想要的: (defrule welcome-toddlers "Give a special greeting to young childre

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

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

如果不可能,那么在drools中如何做到这一点呢?

规则不像函数那样被调用-所以你的问题没有意义。由于工作记忆中发生的事情,规则会以某种明显的随机顺序触发——那么这些规则中的字符串应该放在哪里呢?run函数fireAllRulesmethod只返回被激发的规则数,仅此而已

你希望从哪里得到来自欢迎学步儿童的字符串?必须选择将规则中创建的数据传递到应用程序中该点的方式。以下是一些流行的选项:

声明并设置一个能够存储所有规则结果的全局变量。可以是一张列表或一张地图——你自己选吧。 将结果作为事实插入工作记忆。也许您需要定义一些简单的模板来保存值和标识。您可以使用API从一些Java应用程序代码中获取这些事实。 将值存储到负责触发规则的事实中,例如,向person添加插槽问候语并将其存储在其中。注意不要造成无休止的循环。 也可以在Java类中设计一些静态方法来处理值并适当地存储它。你可以从分手时的后果来称呼它。 除了一些术语上的差异,流口水也是一样的


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

规则的调用不像函数,因此您的问题没有意义。由于工作记忆中发生的事情,规则会以某种明显的随机顺序触发——那么这些规则中的字符串应该放在哪里呢?run函数fireAllRulesmethod只返回被激发的规则数,仅此而已

你希望从哪里得到来自欢迎学步儿童的字符串?必须选择将规则中创建的数据传递到应用程序中该点的方式。以下是一些流行的选项:

声明并设置一个能够存储所有规则结果的全局变量。可以是一张列表或一张地图——你自己选吧。 将结果作为事实插入工作记忆。也许您需要定义一些简单的模板来保存值和标识。您可以使用API从一些Java应用程序代码中获取这些事实。 将值存储到负责触发规则的事实中,例如,向person添加插槽问候语并将其存储在其中。注意不要造成无休止的循环。 也可以在Java类中设计一些静态方法来处理值并适当地存储它。你可以从分手时的后果来称呼它。 除了一些术语上的差异,流口水也是一样的

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