我在理解该not
函数如何与模式匹配交互方面有点困难。我想写一个“这样的事实不存在”的模式匹配。
即,我想要的是:
(defrule init-count
(not (highest-debt ?))
(catherines ?debt)
=>
(assert (highest-debt ?debt))
)
接着:
(defrule continue-count
?debt-fact <- (highest-debt ?h-debt)
(? ?a-debt)
(test (> ?a-debt ?h-debt))
=>
(retract ?debt-fact)
(assert (highest-debt ?a-debt))
)
但由于某种原因not
,这里对我不起作用。替换似乎也不起作用not
。(not (exists /*pattern*/))
有什么我遗漏的东西和/或一种很好的方法来实现用这样的规则找到最高数字吗?
更新
我刚刚发现的答案是:not
模式不应该是第一个((declare (salience 0))
也不计数)。因此,以下代码可以正常工作:
(defrule init-count
(catherines ?debt)
(not (highest-debt ?))
=>
(assert (highest-debt ?debt))
)
抱歉打扰了:(