2016-07-21 6 views
0

私はJESSの初心者ですが、Javaでは中庸です。JESS defruleの書き方 "リストに値が存在しない場合は警告を出力してください"

私は特別な商品のリストとして「CLIST」すべての商品のリストとして、 と「XLIST」(「不可欠」と「地域」の商品が含ま)(「不可欠」と「非必須」の商品が含まれる) を持っています私はルールを作りたい:ステータスが「必須」である「xList」からの「x」が「cList」に存在しない場合、「Missing essential commodity 'x」を印刷する。

私のシステムのパターンは、Jess71p2のpricing_engineの例と同じです。私は、Javaクラスからdeftemplate宣言のOrderItems

と同じようCatalogItems

  • XLISTと同じよう

    • 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

  • +0

    おそらく、事実を作成して挿入する間違いを犯すでしょう。コードなしではわかりません。 – laune

    答えて

    0

    正確な構文が依存を追加しました。以下の規則は、「商品」と「本質」スロットにそれぞれ商品の名前とその本質が列挙され、リストを含むただ1つのcList事実が存在するという、多くの「xList」事実があると仮定して書かれているすべての必須商品の空白のマルチフィールド( "$?")は、必須商品の前後の任意の数のリスト要素に一致します。

    (defrule 
        (xList (commodity ?essential_commodity) (essentiality essential)) 
        (not (cList $? ?essential_commodity $?)) 
        => 
        (assert (warning 
         (str-cat "Missing essential commodity" ?essential_commodity)))) 
    
    +0

    実際、多くのcListの事実があります。すべてのdeftemplateはjavaクラスから宣言されているので、 'warning'はクラスです。私はまだエラーが発生します。 – Zsy

    +0

    詳細について私の投稿を編集しました – Zsy

    0

    アーネストはほとんどなかった。

    (defrule 
        (xList (commodity ?essential_commodity) (essentiality essential)) 
        (not (cList (commodity ?essential_commodity))) 
    => 
        (assert (warning (description ?essential_commodity))) 
    ) 
    

    注:リストではありませんし、ないにも含まれて呼び出すクラス「 - リストは」当惑さ(そして、それは確かアーネストを混同しました)。クラスはsomethingCommodityと呼ばれ、フィールド名は "id"、 "name"などに限定されるかもしれません。

    +0

    私の混乱している例は残念です。実際には、クラスとメソッドを英語以外の言語で書いていたので、理解を深めるために置き換えましたが、それらのことを忘れてしまいました。私のシステムのパターンはJess71p2のpricing_engineの例と同じです。私はあなたのコードを試して、私のポストに結果を入れました。しかし、それでも、私の問題は解決しません。 – Zsy

    +0

    括弧の欠けているペアを追加しました! @ Zsy、特定のエラーメッセージを表示せずに、あなたのために働いていないものを推測する方法はありません。 –

    +0

    @ ErnestFriedman-Hillああ、あなたは私のコードを見ていただきありがとうございます。私は私の感触を失い始めている。 : - ] – laune

    関連する問題