【问题标题】:Passing Values from Java to Jess将值从 Java 传递给 Jess
【发布时间】:2015-06-20 08:30:36
【问题描述】:

我必须从调用 Jess 脚本的 Java 类发送一些值,以便在 Jess 脚本中进行处理。

这是我到目前为止的代码:

int val1=0;
int val2=1;
Rete engine = new Rete();
Value val = engine.batch("abc.clp");
System.out.println("\n"+val);
engine.watchAll();

如何传递值val1val2?我找到了这个example,但没有多大帮助。

【问题讨论】:

  • 请添加 security.clp 的相关部分,以便我们了解您打算如何访问这两个 int 值。 (并且:您可以编辑您的问题 - 删除和创建一个新问题会激怒标签的追随者。)
  • 我很抱歉造成的刺激。而且我不知道如何在 Jess 中访问这些变量。正常应该怎么做??最好的方法是什么?
  • 最好的方法取决于你需要用它们做什么。如果您知道一个值为 0,另一个为 1,您不妨将其放入 Jess 脚本中,而无需将值从 Java 传递给 Jess。
  • 不,我将从用户那里获取这些值。所以我当然不知道这些价值观。
  • 如果我们最终可以解决必须在 clp 脚本中处理这些值的问题?

标签: java expert-system jess


【解决方案1】:

对话框中的一组值最好放入 POJO 中,该 POJO 插入工作内存并通过声明为从 Java 类派生的 deftemplate 访问。在规则中使用它很简单。 POJO 还可以包含一个字段,用于存储由规则触发得出的结果。

该脚本应设置 Jess 定义,但不应调用 run。这最好在 Java 中完成,而且肯定是在插入事实之后。

以下是显示所有上述内容的最小示例。

import jess.*;
public class Main {
    public static void main( String[] args ) throws Exception {
        Rete rete = new Rete();
        Value val = rete.batch("security.clp");
        Data data = new Data();
        data.setA( 42 );
        data.setB( 24 );
        rete.add( data );
        rete.run();
        System.out.println( "result = " + data.getRes() );
    }
}

POJO 类:

public class Data {
    private int a;
    private int b;
    private String res;
    public void setA( int v ){ a = v; }
    public void setB( int v ){ b = v; }
    public void setRes( String v ){ res = v; }
    public int getA(){ return a; }
    public int getB(){ return b; }
    public String getRes(){ return res; }
}

clp 文件,(修改以演示如何访问槽值,并添加了无循环):

(clear)
(deftemplate Data (declare (from-class Data)))
(defrule matchab
   (declare (no-loop TRUE))
   ?data <- (Data {a > b} (b ?b))
=>
   (printout t (fact-slot-value ?data a) " and " ?b crlf)  
   (modify ?data (res agtb))
)

【讨论】:

  • 我无法访问 jess 中的变量 a 和 b!
  • 你在哪里偏离了我的工作示例? - a 和 b 不是变量,它们是通过 Jess 事实的影子模板中的插槽访问的 Java 对象中的字段。
  • 我完全按照你所说的做了。我刚刚尝试打印 Java 对象中字段的值。像这样的东西。 (打印输出 t " a and b: " Data {a} crlf)
  • 你得再学习一下 Jess。这不是访问事实字段的方法。我正在更新答案。
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2014-10-07
  • 2015-07-12
相关资源
最近更新 更多