2016-07-21 7 views
0

저는 JESS에서는 초보자이고 Java에서는 보통입니다. ('필수'와 '중요하지 않은'상품을 포함)작성 방법 JESS defrule "목록에 값이 없으면 경고를 출력합니다."

내가 ('필수'와 '지역'상품을 포함) 특별 상품의 목록으로 'CLIST를'이

, 모든 상품의 목록으로 'xList' 나는 규칙을 만들고 싶다 : '필수'라는 'xList'의 'xList'에서 'x'가 'cList'에 없으면 "필수 필수 상품 'x'가 누락되었습니다."

제 시스템의 패턴은 Jess71p2의 pricing_engine 예제와 동일합니다. OrderItems에

나는 자바 클래스에서 deftemplate 선언과 동일과 동일 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

    정확한 구문은 따라 추가. 아래의 규칙은 각각 "상품"과 "필수"슬롯에 필수품의 이름과 중요성을 나열하는 많은 "xList"사실이 있고 목록을 포함하는 하나의 cList 사실이 있다고 가정하여 작성되었습니다 모든 필수 필수품. blank multifields ("$?")는 필수 필수 항목 전후의 임의의 수의 목록 요소와 일치합니다.

    (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))) 
    ) 
    

    참고 : 목록에없는, 심지어 당황 포함 (하고 있는지 어니스트을 혼동)하지 그 "-List"클래스를 호출. 클래스는 somethingCommodity라고해야하며 필드 이름은 "id", "name"등으로 제한 될 수 있습니다.

    +0

    내 혼란스러운 사례로 미안합니다. 사실, 나는 영어가 아닌 수업으로 수업과 방법을 썼지 만, 이해를 돕기 위해 그것을 대체했지만, 그 것을 고려하는 것을 잊어 버렸습니다. 내 시스템의 패턴은 Jess71p2의 pricing_engine 예제와 동일합니다. 나는 당신의 코드를 시험해 보았고 그 결과를 내 포스트에 올렸다. 그러나 여전히, 그것은 내 문제를 해결하지 못합니다. – Zsy

    +0

    누락 된 괄호 쌍을 추가했습니다! @ Zsy, 특정 오류 메시지 없이는 우리가 당신을 위해 작동하지 않는 것을 추측 할 수있는 방법이 없습니다. –

    +0

    @ ErnestFriedman-Hill 아, 내 코드를 살펴 보는 것이 좋습니다. 나는 내 감각을 잃기 시작했다. : -] – laune