Clipsのルールの RHS に事実が存在することをどのようにテストしますか? 目標事実がいくつ存在するかを数えることによって、現在の状態を「スコアリング」するルールを設計しようとしています。LHS で事実をテストする方法は明らかですが、RHS で同等のテストを行う方法が見つかりません。
これは有効なClipsコードではありませんが、次のようなことをしたいです:
(defrule score-state ""
?score <- (score (value ?value))
=>
(modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))
そのため、ゴール状態が存在しない場合、事実 (スコア (値 0)) が存在します。逆に、すべてのゴール状態が存在する場合、事実 (スコア (値 3)) が存在します。
リファレンス マニュアルには関数 fact-existp が記載されていますが、これにはファクト アドレスを渡す必要があるようです。(fact-existp (goal-1)) のように使用してみましたが、Clips で構文エラーが発生します。