Ich bin ein Neuling in JESS und moderate in Java.Wie schreibe JESS defrule "wenn ein Wert nicht in einer Liste existiert, dann eine Warnung ausdrucken"
I ‚clist‘ als Liste spezieller Rohstoffe (einschließlich ‚wesentlich‘ und ‚regional‘ Commodities) habe, und ‚xList‘ als Liste aller Waren (einschließlich ‚wesentlich‘ und ‚nicht wesentlich‘ Commodities) Ich möchte eine Regel machen: wenn 'x' von 'xList' mit dem Status 'essential' nicht in 'cList' existiert, dann drucke 'Missing essential commodity' x '. "
Um klar zu sein, ist mein System das gleiche Muster wie Pricing_engine Beispiel in Jess71p2.
- clist genauso wie CatalogItems
- xList genauso wie Order
Ich erkläre deftemplate von Java-Klassen. hier ist die deftemplate;
(import com.aisy.entity.*)
(deftemplate oldList(declare (from-class oldList)))
(deftemplate xList (declare (from-class xList)))
(deftemplate cList (declare (from-class cList)))
Hier ist die 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
}
Hier ist die 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
Hier ist warning.java;
public class warning {
private final String description;
public warning(String aDescription) {
description = aDescription;
}
public String getDescription() {
return description;
}
}
Hier ist die Defrule;
(defrule
(xList (commodity ?essential_commodity) (essentiality /essential/))
(not(cList (commodity ?essential_commodity)))
=> (add (new warning "Missing essential commodity" ?essential_commodity))
)
Ich versuche, einige Informationen zur Datenbank für xList und clist zu setzen:
xList("100000", "PEANUT", "2.45");
xList("100003", "BREAD", "1.5");
cList("100000", "PEANUT", "ESSENTIAL");
cList("100002", "CAKE", "ESSENTIAL");
cList("100003", "BREAD", "NON ESSENTIAL");
Von diesem, wenn ich meine Regel-Engine laufen, sollte das Ergebnis
"Missing essential commodity 100002"
sein Aber mein aktuelles Ergebnis ist:
"Missing essential commodity 100000"
"Missing essential commodity 100002"
Wie schreibe ich das reparieren?
bearbeitet: 2016.07.22 hinzugefügt xList.java und cList.java
Vielleicht machen Sie beim Erstellen und Einfügen der Fakten einen Fehler. Kann nicht ohne den Code dafür sagen. – laune