- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 jess 规则的初学者,所以我不明白如何使用它。我读了很多教程,但我很困惑。
所以我有这个代码:
Date choosendate = "2013-05-05";
Date date1 = "2013-05-10";
Date date2 = "2013-05-25";
Date date3 = "2013-05-05";
int var = 0;
if (choosendate.compareTo(date1)==0)
{
var = 1;
}
else if (choosendate.compareTo(date2)==0)
{
var = 2;
}
else if (choosendate.compareTo(date3)==0)
{
var = 3;
}
我怎样才能用杰斯规则做到这一点?我想制定一个 jess 规则,它获取日期,比较它们并在 java 中返回变量 var。你能给我一个简单的例子来理解它吗?
最佳答案
这个问题不太适合 Jess 所写的(Java 代码按原样是短而高效的),但我可以向您展示一个可以适应其他更复杂情况的解决方案。首先,您需要定义一个模板来保存 Date
、int
对:
(deftemplate pair (slot date) (slot score))
然后您可以使用模板创建一些事实。这些在某种程度上相当于您的 date1
、date2
等,只不过它们将每个日期与相应的 var
值相关联:
(import java.util.Date)
(assert (pair (date (new Date 113 4 10)) (score 1)))
(assert (pair (date (new Date 113 4 25)) (score 2)))
(assert (pair (date (new Date 113 4 5)) (score 3)))
我们可以定义一个全局变量来保存最终的计算分数(更容易从 Java 获取分数。)这相当于您的 var
变量:
(defglobal ?*var* = 0)
假设“选择的日期”将位于有序事实chosendate
中,我们可以编写如下规则。它会替换您的 if
语句链,并将您选择的日期与工作内存中的所有日期进行比较,直到找到匹配项,然后停止:
(defrule score-date
(chosendate ?d)
(pair (date ?d) (score ?s))
=>
(bind ?*var* ?s)
(halt))
好的,现在,上面的所有代码都放在一个名为 dates.clp
的文件中。以下 Java 代码将利用它(包含对 Rete.watchAll()
的调用,以便您可以看到一些有趣的跟踪输出;您可以在实际程序中将其保留):
import jess.*;
// ...
// Get Jess ready
Rete engine = new Rete();
engine.batch("dates.clp");
engine.watchAll();
// Plug in the "chosen date"
Date chosenDate = new Date(113, 4, 5);
Fact fact = new Fact("chosendate", engine);
fact.setSlotValue("__data", new Value(new ValueVector().add(chosenDate), RU.LIST));
engine.assertFact(fact);
// Run the rule and report the result
int count = engine.run();
if (count > 0) {
int score = engine.getGlobalContext().getVariable("*var*").intValue(null);
System.out.println("Score = " + score);
} else {
System.out.println("No matching date found.");
}
正如我所说,这不是一个很好的选择,因为生成的代码比原始代码更大、更复杂。如果您有多个交互规则,则使用规则引擎才有意义;这样的 Jess 程序没有比这更多的开销,因此与等效的 Java 代码相比,很快就开始看起来像是一种简化。祝杰西好运!
关于java - 我如何在java中制定jess规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17832364/
我需要帮助制定 SQL 语句。这些表是 视频(video_id,描述,价格,category_id) 类别(category_id,描述) 查询需要生成一个摘要列表,显示属于每个类别的视频数量。未分配
我正在 Angular 1.5 中构建一个应用程序,并且我自己完成所有 CSS 等工作。到目前为止,我一直在通过在所有 html 模板中包含以下代码来处理错误和成功消息 然后我在处理错误/成
这是我在检查器上看到的: 两个规则中有一个左高亮,这是 Firefox 正在编写的规则,如果我查看计算样式,我会看到: 最后这是原始 CSS 的样子: 所以 Firefox 正在以某种方式改变位置和宽
我有两个系统 A 和 B。A 是 TCP Client,向 B 上的 TCP Server 发送消息。 ------------------ --------------
我是安卓新手。我想从 MainActivity.class 接收整数和字符串,并将其打印在 DisplayMessageActivity.class 中。从我在网上找到的所有解决方案中,他们说我应该使
我请求帮助了解如何使用 javax.persistence.criteria 包制定“in”条件。 我正在根据 Contacts 类的搜索条件创建 CriteriaQuery。一个联系人可以属于 0
我正在使用具有浮点坐标的 3D 向量进行计算。有时,我想检查一个向量是否非零。但是,对于 float ,总是有可能出现舍入错误。 Python 中是否有一种标准方法来检查 float 是否足够接近于零
这是一个愚蠢的问题,但我试图通过 Google、代码片段、教程来解决这个问题,所有这些都引导我找到一些示例,其中模型对于我想要执行的编码来说太浅了。 我想开发一个应用程序,其中数据采用 parent
我是一名优秀的程序员,十分优秀!