【发布时间】:2016-11-25 17:21:38
【问题描述】:
我是 JESS 的新手,Java 的中级。
我有“cList”作为特殊商品列表(包括“必需”和“区域”商品), 和“xList”作为所有商品的列表(包括“必需”和“非必需”商品) 我想制定一个规则:如果 'cList' 中不存在状态为 'essential' 的 'xList' 中的 'x',则打印“缺少基本商品 'x'。”
需要明确的是,我的系统模式与 Jess71p2 中的定价引擎示例相同。
- cList 与 CatalogItems 相同
- xList 与 OrderItems 相同
我从 Java 类中声明 deftemplate。 这是定义模板;
(import com.aisy.entity.*)
(deftemplate oldList(declare (from-class oldList)))
(deftemplate xList (declare (from-class xList)))
(deftemplate cList (declare (from-class cList)))
这是 xList.java
package com.aisy.entity;
import java.sql.Timestamp;
public class xList {
private Long id_commodity;
private String commodity;
private String essentiality;
private Timestamp update;
public xList() {
super();
}
public xList(Long id_commodity, String commodity, String essentiality, Timestamp update) {
super();
this.id_commodity = id_commodity;
this.commodity = commodity;
this.essentiality = essentiality;
this.update = update;
}
public Long getId_commodity() {
return this.id_commodity;
}
public void setId_Commodity(Long id_commodity) {
this.id_commodity = id_commodity;
}
public String getCommodity() {
return this.commoditty;
}
....getter and setter methods for the rest fields
}
这是 cList.java;
public class cList {
private Long id_commodity;
private String commodity;
private String price;
private Double final_price;
public cList(Long id_commodity, String commodity, String price, Double final_price) {
super();
this.id_commodity = id_commodity;
this.commodity = commodity;
this.price = price;
this.final_price = final_price;
}
public cList() {
super();
}
...common getter and setter methods for all fields
这里是warning.java;
public class warning {
private final String description;
public warning(String aDescription) {
description = aDescription;
}
public String getDescription() {
return description;
}
}
这里是defrule;
(defrule
(xList (commodity ?essential_commodity) (essentiality /essential/))
(not(cList (commodity ?essential_commodity)))
=> (add ( new warning "Missing essential commodity" ?essential_commodity))
)
我尝试将一些信息放到 xList 和 cList 的数据库中:
xList("100000", "PEANUT", "2.45");
xList("100003", "BREAD", "1.5");
cList("100000", "PEANUT", "ESSENTIAL");
cList("100002", "CAKE", "ESSENTIAL");
cList("100003", "BREAD", "NON ESSENTIAL" );
因此,如果我运行我的规则引擎,结果应该是
"Missing essential commodity 100002"
但我目前的结果是:
"Missing essential commodity 100000"
"Missing essential commodity 100002"
如何解决这个问题?
已编辑:07/22/2016 添加了 xList.java 和 cList.java
【问题讨论】:
-
也许您在创建和插入事实时犯了一个错误。没有代码就无法判断。
标签: conditional rule not-exists expert-system jess