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