我的Jess代码中有一些规则,我想修改工作内存中的两个事实。
所声称的事实是:(assert (analysis (reasons $?c) (total ?t))))
原因$?c
是一个多时隙,如果规则需要,我想添加到这个多时隙。
例如:如果用户喝了太多酒,我想要的文字是“你喝了很多不安全的酒”。作为字段添加到多时隙(reasons $?c)
。
我将如何实现这一任务。我已经做了很多研究并尝试了几种方法,但它们无法正常工作。
答案 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;可以通过多个规则添加。