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 回答