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