有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Jess规则中从终端选择deffacts

我用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)

我该如何称呼规则?从我的终端收到x

因为我想用名字找出真相?只搜索规则中的这个事实。我希望我的参赛作品是这样的(彼得),彼得=?x


共 (1) 个答案

  1. # 1 楼答案

    正确的方法是(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!
    

    第二个看起来像这样:

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

    你可以阅读更多关于查询here.