Frage

Ich möchte ein Programm in Clips machen, die alle Partitionen einer Zahl erzeugt. Als erstes habe ich mit der Nummer wie sein Grunde Partition starten: (1 1 1 1 1), wenn es der Nummer 5, usw.

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

Das Problem ist, dass, obwohl der Code in Ordnung scheint, es Fehler in den Zeilen mit „nicht“ hat - wo ich angeben, dass die neue Partition erstellt sollte bereits in den Tatsachen vorliegen. Ich weiß nicht, was das Problem ist, ist jede Idee willkommen. Dank

War es hilfreich?

Lösung

Im Bedingungsteil einer Regel, müssen Sie den Operator = verwenden, um einen Ausdruck auszuwerten und zu bestimmen, dass sie einen Wert in der Tatsache entspricht:

(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)))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top