如何修改工作内存中的Jess多时隙事实

时间:2014-03-12 18:47:00

标签: jess fact

我的Jess代码中有一些规则,我想修改工作内存中的两个事实。

所声称的事实是:(assert (analysis (reasons $?c) (total ?t))))

原因$?c是一个多时隙,如果规则需要,我想添加到这个多时隙。

例如:如果用户喝了太多酒,我想要的文字是“你喝了很多不安全的酒”。作为字段添加到多时隙(reasons $?c)。 我将如何实现这一任务。我已经做了很多研究并尝试了几种方法,但它们无法正常工作。

2 个答案:

答案 0 :(得分:1)

也许不是最好的方式,但这很简单:

(defrule modify-something
?f <- (analysis (reasons $?c) (total ?t))))
=>
(modify ?f (reasons (create$ ?c "hey"))))

答案 1 :(得分:1)

应该做一点预防措施,以便规则不会循环:

(defrule match
;;  (declare (no-loop true))
  ?t <- (Thing (what ?x))
  ?b <- (Box (id ?id)(things $?things&:(not (member$ ?x $?things)) ))
=>
  (printout t ?id " not contains " ?x crlf)
  (modify ?b (things (list $?things ?x)))
)

要么使用no-loop子句,要么通常被认为是更精明的方法,使用约束来确保规则可能添加的项目不在列表中;特别是当一个特定的&#34;原因&#34;可以通过多个规则添加。