2010-05-27 3 views
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)) 
) 

Проблема заключается в том, что хотя код кажется нормально, то есть ошибки на строки с «нет» - где я указываю, что созданный новый раздел еще не должен существовать в фактах. Я не знаю, в чем проблема, любая идея приветствуется. Благодаря

ответ

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)))