Странные ошибки в клипах - PullRequest
0 голосов
/ 27 мая 2010

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

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

1 Ответ

1 голос
/ 06 июля 2010

В условной части правила необходимо использовать оператор =, чтобы оценить выражение и определить, соответствует ли оно значению в факте:

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