首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JESS写成“如果列表中不存在值,则打印警告”

如何将JESS写成“如果列表中不存在值,则打印警告”
EN

Stack Overflow用户
提问于 2016-07-21 23:01:22
回答 2查看 174关注 0票数 0

我是JESS的新手,Java的温和派。

我把“cList”作为特殊商品的清单(包括‘必要’和‘区域性’商品),'xList‘作为所有商品(包括’基本‘和’非必需‘商品的列表),我想制定一个规则:如果'xList’中的'x‘与地位’基本‘不存在'cList’,那么打印“缺少基本商品‘x’”。

要明确的是,我的系统的模式与Jess71p2中的Jess71p2示例相同。

  • cList与CatalogItems相同
  • xList与OrderItems相同

我声明脱离Java类。这是缺陷模板;

代码语言:javascript
复制
    (import com.aisy.entity.*)
    (deftemplate oldList(declare (from-class oldList)))
    (deftemplate xList  (declare (from-class xList)))
    (deftemplate cList  (declare (from-class cList)))

这是xList.java

代码语言:javascript
复制
    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;

代码语言:javascript
复制
    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;

代码语言:javascript
复制
    public class warning {
        private final String description;
        public warning(String aDescription) {
        description = aDescription;
        }

        public String getDescription() {
        return description;
        }
    }

这是反规则;

代码语言:javascript
复制
    (defrule 
       (xList (commodity ?essential_commodity) (essentiality /essential/))
       (not(cList (commodity ?essential_commodity)))
        => (add ( new warning "Missing essential commodity" ?essential_commodity))
    )

我尝试将一些信息放到xList和cList的数据库中:

代码语言:javascript
复制
    xList("100000", "PEANUT", "2.45");
    xList("100003", "BREAD", "1.5");

    cList("100000", "PEANUT", "ESSENTIAL");
    cList("100002", "CAKE", "ESSENTIAL");
    cList("100003", "BREAD", "NON ESSENTIAL" );

这样,如果我运行我的规则引擎,结果应该是

代码语言:javascript
复制
   "Missing essential commodity 100002"

但我目前的结果是:

代码语言:javascript
复制
    "Missing essential commodity 100000"
    "Missing essential commodity 100002"

怎么写解决这个问题?

编辑: 07/22/2016添加xList.java和cList.java

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 01:00:41

当然,确切的语法取决于您所匹配的事实的确切性质。下面的规则是假设有许多"xList“事实,每个事实分别在”商品“和”本质“槽中列出商品的名称及其本质,并且只有一个cList事实,其中包含了所有基本商品的清单。空白多字段("$?")在基本商品之前和之后匹配任意数量的列表元素。

代码语言:javascript
复制
(defrule 
   (xList (commodity ?essential_commodity) (essentiality essential))
   (not (cList $? ?essential_commodity $?))
    =>
   (assert (warning
       (str-cat "Missing essential commodity" ?essential_commodity))))
票数 0
EN

Stack Overflow用户

发布于 2016-07-22 06:25:15

欧内斯特差一点就到了

代码语言:javascript
复制
(defrule 
   (xList (commodity ?essential_commodity) (essentiality essential))
   (not (cList (commodity ?essential_commodity)))
=>
   (assert (warning (description ?essential_commodity)))
)

注意:调用没有列表甚至不包含的类"-List“是令人不安的(这确实使Ernest感到困惑)。类应该被称为somethingCommodity,字段名可能被限制为"id“、"name”等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38515704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档