2010-05-27 9 views
0

Je veux créer un programme dans Clips qui génère toutes les partitions d'un nombre. tout ce que je commence d'abord avec le numéro comme sa partition de base: (1 1 1 1 1) si elle est le numéro 5, etc.Étranges erreurs dans les clips

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

Le problème est que bien que le code semble bien, il a des erreurs sur la lignes avec "non" - où je précise que la nouvelle partition créée ne devrait pas déjà exister dans les faits. Je ne sais pas quel est le problème, toute idée est la bienvenue. Merci

Répondre

1

Dans la partie de l'état d'une règle, vous devez utiliser l'opérateur = pour évaluer une expression et déterminer si elle correspond à une valeur dans le fait:

(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))) 
Questions connexes