not
関数がパターンマッチングとどのようにやり取りするかを理解するのが少し難しいです。私は "このような事実は存在しない"というパターンマッチを書いています。使用しているCLIPSは起動しません。
つまり、私が欲しいのです:
(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))
)
ない条件付き要素がルールで最初のパターン、パターン(initial-たバージョン6.24およびそれ以前では、:(
次回は、他の人が読むことができるようにコードを書式設定してみてください。 – pad
私が見たすべてのチュートリアルの例は、そのように書式設定されています。すべての深さレベルでLispスタイルの改行を追加したいですか? –
私はあなたのコードを質問に書式化することを意味しました。あなたのコーディングスタイルに関するコメントはありませんでした。 – pad