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))
)
おじゃまします :(