Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jess规则中我们如何从终端选择deffacts_Java_Rules_Jess - Fatal编程技术网

Java 在Jess规则中我们如何从终端选择deffacts

Java 在Jess规则中我们如何从终端选择deffacts,java,rules,jess,Java,Rules,Jess,我已经用Jess编写了我的代码,它是: ;;;************* ;;;* MODULES * ;;;************* (defmodule EXAMPLE) ;;;************* ;;;* TEMPLATES * ;;;************* (deftemplate EXAMPLE::status (slot name) (slot age) ) ;;;************* ;;;* FACTS * ;;;*************

我已经用Jess编写了我的代码,它是:

;;;*************
;;;* MODULES   *
;;;*************

(defmodule EXAMPLE)

;;;*************
;;;* TEMPLATES *
;;;*************

(deftemplate EXAMPLE::status
(slot name)
(slot age)
)

;;;*************
;;;* FACTS     *
;;;*************

(deffacts EXAMPLE::?x
(status (name Peter)
    (age 24)
)
)

;;;***********************
;;;* GENERATE PATH RULES *
;;;***********************

(defrule EXAMPLE::rule1
    ?res <-
    (status (name Peter)
        (age 24)            
    )
    => 
    (printout t "Hello Peter" crlf)
    (restract ?res)
)

(run)
*************
;;;* 模块*
;;;*************
(DEF模块示例)
;;;*************
;;;* 模板*
;;;*************
(deftemplate示例::状态
(插槽名称)
(老虎机时代)
)
;;;*************
;;;* 事实*
;;;*************
(示例::?x
(身份(姓名:彼得)
(24岁)
)
)
;;;***********************
;;;* 生成路径规则*
;;;***********************
(defrule示例::rule1
?res
(打印输出t“Hello Peter”crlf)
(restract?res)
)
(运行)
如何使用终端中的?x调用规则


因为我想找到名为?x的事实,然后只搜索规则中的这个事实。我希望我的条目是类似于(Peter)的东西,Peter=?x

正确的方法是(1)使用显式触发器事实,或(2)使用
defquery
而不是
defrule
——查询与规则非常相似,只是可以显式调用查询

第一种方法看起来像

(defrule EXAMPLE::rule1
    (greet ?x)
    ?res <- (status (name ?x))
    => 
    (printout t "Hello, " ?x "!" crlf)
    (retract ?res))


Jess> (assert (greet Peter))
<Fact-1>
Jess> (run)
Hello, Peter!
(定义规则示例::规则1
(打招呼?x)
?res
(打印输出t“你好,”?x“!”crlf)
(收回?res))
杰西>(断言(问候彼得))
杰西>(跑步)
你好,彼得!
第二个看起来像这样:

(defquery EXAMPLE::query1
    (declare (variables ?x))
    ?res <- (status (name ?x))))


Jess> (bind ?result (run-query* EXAMPLE::query1 Peter))
Jess> (while (?result next)
          (printout t "Hello, " (?result getString ?x) crlf)
          (retract (?result getObject res)))
(defquery示例::query1
(声明(变量?x))
?res(绑定?结果(运行查询*示例::query1))
Jess>(while(?result next)
(打印输出t“Hello”(?结果getString?x)crlf)
(收回(?result getObject res)))

您可以阅读有关查询的更多信息,正确的方法是(1)使用显式触发器事实,或(2)使用
defquery
而不是
defrule
——查询与规则非常相似,只是您可以显式调用查询

第一种方法看起来像

(defrule EXAMPLE::rule1
    (greet ?x)
    ?res <- (status (name ?x))
    => 
    (printout t "Hello, " ?x "!" crlf)
    (retract ?res))


Jess> (assert (greet Peter))
<Fact-1>
Jess> (run)
Hello, Peter!
(定义规则示例::规则1
(打招呼?x)
?res
(打印输出t“你好,”?x“!”crlf)
(收回?res))
杰西>(断言(问候彼得))
杰西>(跑步)
你好,彼得!
第二个看起来像这样:

(defquery EXAMPLE::query1
    (declare (variables ?x))
    ?res <- (status (name ?x))))


Jess> (bind ?result (run-query* EXAMPLE::query1 Peter))
Jess> (while (?result next)
          (printout t "Hello, " (?result getString ?x) crlf)
          (retract (?result getObject res)))
(defquery示例::query1
(声明(变量?x))
?res(绑定?结果(运行查询*示例::query1))
Jess>(while(?result next)
(打印输出t“Hello”(?结果getString?x)crlf)
(收回(?result getObject res)))

您可以阅读有关查询的更多信息

欧内斯特先生非常感谢您的回答。更多信息..我将尝试更具体一些..如果我有100个deffacts,我只想“运行”变量名为“FirstFact”的事实?nameofFact,它将由(bind?nameofFact(read))给出。我的问题是,我们如何才能选择我们需要的事实…以及我们(重置)的所有事实。欧内斯特先生非常感谢您的回答。还有……我将尝试更具体一些……如果我有100个defacts,我只想“运行”我的变量名为“FirstFact”的事实?它将由(bind?nameofFact(read))。我的问题是,我们如何用(重置)所有事实来选择我们需要的事实。