Question

Je veux faire un programme dans les clips qui génère toutes les partitions d'un certain nombre. Tout d'abord je commence par le numéro comme sa partition de base: (1 1 1 1 1) si elle est le numéro 5, etc.

(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 les lignes avec « non » - où je précise que la nouvelle partition créée ne devrait pas exister déjà dans les faits. Je ne sais pas quel est le problème, toute idée est la bienvenue. Merci

Était-ce utile?

La solution

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)))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top