我是专家编程的新手并且遇到了问题。 我想知道是否存在事实,然后根据RHS中的这些事实做一些操作。
例如: - 我有4个事实。
(deffacts test (A 1) (B 2) (C 3) (D 4))
以下规则事实E不存在。所以它永远不会进入RHS。并且不会触发规则。
(defrule rul1
(declare (salience 10))
(A ?var1)
(B ?var2)
(C ?var3)
(E ?var4)
=>
(if
(
or (or (or (= ?var1 1) (= ?var2 1)) (= ?var3 1)) (= ?var4 4)
)
then
(printout t "Rule matched" crlf))
)
)
我的要求是,如果事实不存在,只需忽略或分配虚拟值,以便它可以触发规则。
我怎样才能做到这一点?
答案 0 :(得分:1)
尝试将匹配逻辑放在规则的条件而不是操作中:
CLIPS>
(deffacts test (A 1) (B 2) (C 3) (D 4))
CLIPS>
(defrule rul1
(declare (salience 10))
(or (A 1)
(B 1)
(C 1)
(E 4))
=>
(printout t "Rule matched" crlf))
CLIPS> (reset)
CLIPS> (agenda)
10 rul1: f-1
For a total of 1 activation.
CLIPS>