私はJESSの初心者ですが、Javaでは中庸です。JESS defruleの書き方 "リストに値が存在しない場合は警告を出力してください"
私は特別な商品のリストとして「CLIST」すべての商品のリストとして、 と「XLIST」(「不可欠」と「地域」の商品が含ま)(「不可欠」と「非必須」の商品が含まれる) を持っています私はルールを作りたい:ステータスが「必須」である「xList」からの「x」が「cList」に存在しない場合、「Missing essential commodity 'x」を印刷する。
私のシステムのパターンは、Jess71p2のpricing_engineの例と同じです。私は、Javaクラスからdeftemplate宣言のOrderItems
と同じようCatalogItems
- CLIST。 ここにdeftemplateがあります。
(import com.aisy.entity.*) (deftemplate oldList(declare (from-class oldList))) (deftemplate xList (declare (from-class xList))) (deftemplate cList (declare (from-class cList)))
はここでここでcList.javaだ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 }
です。
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"
これを修正する方法は?編集した
:2016年7月22日には、あなたが一致している事実の正確な性質に、当然のことながら、xList.javaとcList.java
おそらく、事実を作成して挿入する間違いを犯すでしょう。コードなしではわかりません。 – laune