运行 r.execute() 来自 Java 在 for 循环中

running r.execute() from Java in a for loop

我用JESS写了一段代码。我现在 运行 来自 Java 的代码。我有 运行 这个问题,我想在 for 循环中使用 engine.execute("") 命令。 我的示例代码是:

for (int i = 0; i < 10; i++){
    for (int j = 0; j < 10; j++){
r.executeCommand("(answer(ident headers.get(i)(text patientData.get(j).get(i))");
    }
}

其中 answer 是 JESS 中带有两个插槽的 detemplate。我正在读取 Java 中的文本文件并将值插入 deftemplate 的插槽中。

谢谢, 阿里

如果 answer 是一个带有插槽 identtext 的 detemplate,下面的片段看起来像是一个事实的构造:

(answer(ident headers.get(i)(text patientData.get(j).get(i))
  • 事实并不代表可以通过 Rete.executeCommand.
  • 执行的 Jess 命令
  • 您不应该使用已弃用的方法 executeCommand;使用 eval.
  • 你的括号不平衡,6 个左括号对 4 个右括号。
  • 假设 headers 在你的 Java 应用程序中是一个 List<String>,你不能简单地向 Jess 抛出一个 Java 方法调用,它不理解 Java 语法首先,(大概)根本不知道 pojo header
  • pojo也是如此patientData
  • 虽然您可以将 objects 从 Java 程序传递给 Jess 引擎,但这对于像 i 和 [=22 这样的简单变量来说是绝对不可能的=].

考虑到所有这些(其中大部分很容易从优秀的 Jess 手册中学习),使用

r.eval( "(assert (answer (ident \"" +
        headers.get(i) +
        "\")(text \"" +
        patientData.get(j).get(i) +
        "\")))" );

可能有机会成功并确实将新事实插入工作记忆中。