質問
数のすべてのパーティションを生成するクリップでプログラムを作成したいと思います。まず、彼の基本的なパーティションのような番号から始めます:(1 1 1 1 1)それが5番の場合など。
(deftemplate partition (multislot p) )
(deffacts facts (p 1 1 1 1 1) )
(defrule adds
(p $?a ?b ?c $?d)
(not (p $?a (+ ?b ?c) $?d))
(not (p (+ ?b ?c) $?a $?d))
(not (p $?a $?d (+ ?b ?c)))
=> (assert (p $?a (+ ?b ?c) $?d))
)
問題は、コードは問題ないように見えますが、「not」のある行にエラーがあることです。ここで、作成された新しいパーティションが事実にまだ存在しないことを指定します。何が問題なのかわかりませんが、どんな考えも大歓迎です。ありがとう
解決
ルールの条件部分では、=演算子を使用して式を評価し、事実の値と一致すると判断する必要があります。
(defrule adds
(p $?a ?b ?c $?d)
(not (p $?a =(+ ?b ?c) $?d))
(not (p =(+ ?b ?c) $?a $?d))
(not (p $?a $?d =(+ ?b ?c)))
=>
(assert (p $?a (+ ?b ?c) $?d)))
所属していません StackOverflow