gpt4 book ai didi

java - 将值从 Java 传递到 Jess

转载 作者:行者123 更新时间:2023-12-01 11:24:55 24 4
gpt4 key购买 nike

我必须从调用 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但并没有多大帮助。

最佳答案

最好将对话框中的一组值放入 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))
)

关于java - 将值从 Java 传递到 Jess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com