gpt4 book ai didi

CLIPS 使用 (not (a-fact $?)) 不会触发

转载 作者:行者123 更新时间:2023-12-04 06:03:59 25 4
gpt4 key购买 nike

我有点难以理解 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))
)

抱歉打扰了:(

最佳答案

在版本 6.24 及更早版本中,当非条件元素是规则中的第一个模式时,模式(初始事实)被添加在它之前(这在第 5.4.9 节 LHS CE 的自动添加和重新排序中进行了描述,在基本编程指南)。当执行(重置)命令时,(初始事实)事实被断言。我认为这就是你的问题的原因。如果您在断言其他事实之前执行了(重置),那么您的原始规则就会起作用。

关于CLIPS 使用 (not (a-fact $?)) 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com