我想在剪辑中制作一个程序,该程序生成一个数字的所有分区。首先,我从他的基本分区之类的数字开始:(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)) 
)

问题是,尽管代码看起来不错,但它的行上有“不”的行错误 - 我指定在事实中不应存在创建的新分区。我不知道有什么问题,欢迎任何想法。谢谢

有帮助吗?

解决方案

在规则的条件部分,您需要使用=操作员评估表达式并确定其与事实相匹配:

(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)))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top