剪辑中的奇怪错误

时间:2010-05-27 13:41:10

标签: clips

我想在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”的行上有错误 - 我在其中指定创建的新分区不应该已经存在于事实中。 我不知道是什么问题,欢迎任何想法。 感谢

1 个答案:

答案 0 :(得分: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)))