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