0

ある番号のすべてのパーティションを生成するプログラムをClipsで作成したいと思います。まず、彼の基本的なパーティションのような番号から始めます:(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」の行にエラーがあることです。ここで、作成された新しいパーティションがファクトにまだ存在していないことを指定します。何が問題なのかわかりませんが、どんなアイデアでも大歓迎です。ありがとう

4

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)))
于 2010-07-05T23:58:31.660 に答える