我是JESS的新手,Java的温和派。
我把“cList”作为特殊商品的清单(包括‘必要’和‘区域性’商品),'xList‘作为所有商品(包括’基本‘和’非必需‘商品的列表),我想制定一个规则:如果'xList’中的'x‘与地位’基本‘不存在'cList’,那么打印“缺少基本商品‘x’”。
要明确的是,我的系统的模式与Jess71p2中的Jess71p2示例相同。
我声明脱离Java类。这是缺陷模板;
(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
(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
发布于 2016-07-22 01:00:41
当然,确切的语法取决于您所匹配的事实的确切性质。下面的规则是假设有许多"xList“事实,每个事实分别在”商品“和”本质“槽中列出商品的名称及其本质,并且只有一个cList事实,其中包含了所有基本商品的清单。空白多字段("$?")在基本商品之前和之后匹配任意数量的列表元素。
(defrule
(xList (commodity ?essential_commodity) (essentiality essential))
(not (cList $? ?essential_commodity $?))
=>
(assert (warning
(str-cat "Missing essential commodity" ?essential_commodity))))发布于 2016-07-22 06:25:15
欧内斯特差一点就到了
(defrule
(xList (commodity ?essential_commodity) (essentiality essential))
(not (cList (commodity ?essential_commodity)))
=>
(assert (warning (description ?essential_commodity)))
)注意:调用没有列表甚至不包含的类"-List“是令人不安的(这确实使Ernest感到困惑)。类应该被称为somethingCommodity,字段名可能被限制为"id“、"name”等等。
https://stackoverflow.com/questions/38515704
复制相似问题