Вопрос
Я хочу сделать программу в клипах, которые генерируют все разделы номера. Прежде всего, я начинаю с номера, как его основной раздел: (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