Angesichts der folgenden Klassenhierarchie:Löschen Nested Instanzen
(defclass ATOM (is-a USER))
(defclass ONE_CHILD (is-a USER)
(slot next
(type INSTANCE)))
(defclass MANY_CHILDREN (is-a USER)
(multislot next
(type INSTANCE)))
Ich mag würde rekursiv die folgenden Instanzdaten löschen:
(definstances EXAMPLE_DATA
(instance-a of ATOM)
(instance-b of ONE_CHILD
(next (make-instance of ATOM)))
(instance-c of MANY_CHILDREN
(next (make-instance of ATOM)
(make-instance of ATOM)
(make-instance of ATOM)))
(instance-d of MANY_CHILDREN)
)
Wenn ich naiverweise send
jede benannte Instanz eine delete
Nachricht, dann die Instanzen selbst werden gelöscht, während die verschachtelten Instanzen nicht gelöscht werden. Obwohl ich sicher bin, dass es vorhanden ist, konnte ich keine Dokumentation finden, die beschreibt, wie diese Operation im CLIPS 6.3 Benutzerhandbuch oder im Basic Programming Guide beschrieben wird.
Die folgende Befehlsfolge führt erwartungsgemäß zu einem nicht leeren Satz von Instanzen nach Abschluss. Was kann ich unterscheiden, um die rekursive Löschung durchzuführen?
CLIPS> (reset)
CLIPS> (instances)
[initial-object] of INITIAL-OBJECT
[instance-a] of ATOM
[instance-b] of ONE_CHILD
[gen29] of ATOM
[instance-c] of MANY_CHILDREN
[gen30] of ATOM
[gen31] of ATOM
[gen32] of ATOM
[instance-d] of MANY_CHILDREN
For a total of 9 instances.
CLIPS> (send [instance-a] delete)
TRUE
CLIPS> (send [instance-b] delete)
TRUE
CLIPS> (send [instance-c] delete)
TRUE
CLIPS> (send [instance-d] delete)
TRUE
CLIPS> (instances)
[initial-object] of INITIAL-OBJECT
[gen29] of ATOM
[gen30] of ATOM
[gen31] of ATOM
[gen32] of ATOM
For a total of 5 instances.