Вопрос

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