2016-04-01 34 views
0

在杰斯的方式返回一个值从规则中返回一个字符串就是这样:从规则杰斯或滴料(专家系统)

(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?

回答

3

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

你想从欢迎小孩那里得到那个字符串?必须选择将规则中创建的数据传递到应用程序中的那一点。这里有一些流行的选项:

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

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

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

+0

感谢您的解释。 –