Class Compound

java.lang.Object
   |
   +----Term
           |
           +----Compound

public class Compound
extends Term
Eine Compound ist ein Prädikat mit einem mehreren oder keinen Termen als Argument.

Siehe auch SatchParserEBNF.html.


Constructor Index

 o Compound(FkSymbol)
 o Compound(FkSymbol, Vector)

Method Index

 o bindTo(Term[])
 o clonedValue()
 o cloneYourValue()
Im ersten Schritt müssen alle Values geklont werden.
 o equals(Object)
 o getSubstitutions(Atom)
 o getSubstitutions(Compound)
Gibt einen Array von Variablen-Bindungen zurück.
 o getVarsCopy()
 o internVars()
Diese Methode wird vom Parser nach dem Parsen aufgerufen, und stellt sicher, daß an jeder Stelle der Compound, an der zwei gleichlautende Variablen stehen, das selbe Var-Objekt steht.
 o internVars(Vector)
Siehe internVars().
 o matches(Term, Compound)
Matcht einen Term, wenn er eine Compound oder eine Var ist.
 o predicate()
Gibt Prädikatsymbol und Stelligkeit aus.
 o toString()
 o unbind(Compound)
Diese Methode entbindet nur die Variablen in dieser Compound, die von der übergebenen Compound gebunden wurden.
 o value()

Constructors

 o Compound
 public Compound(FkSymbol fs,
                 Vector t)
 o Compound
 public Compound(FkSymbol fs)

Methods

 o equals
 public boolean equals(Object ob)
Overrides:
equals in class Object
 o matches
 public boolean matches(Term t,
                        Compound comp)
Matcht einen Term, wenn er eine Compound oder eine Var ist. Der anfragende Term muss der sein, an dem .matches() ausgeführt wird. D.h. was in der Datenbank steht muss an das anfragende Atom übergeben werden.

Overrides:
matches in class Term
 o predicate
 public String predicate()
Gibt Prädikatsymbol und Stelligkeit aus. Beispiel:

Die Compound p(a,f(88,9),J) würde p/3 zurückgeben.

 o value
 public Term value()
Overrides:
value in class Term
 o cloneYourValue
 public void cloneYourValue()
Im ersten Schritt müssen alle Values geklont werden. Dann wird die Funktion clonedValue aufgerufen, die den geklonten Wert zurückgibt.

Nach einem Aufruf von cloneYourValue muss die Funktion unbind aufgerufen werden!
Geschieht dies nicht bleiben die gematchten Variablen gebunden, und die DataBase verliert ihren Wert.

Overrides:
cloneYourValue in class Term
 o clonedValue
 public Term clonedValue()
Overrides:
clonedValue in class Term
 o bindTo
 public void bindTo(Term werte[])
 o unbind
 public void unbind(Compound comp)
Diese Methode entbindet nur die Variablen in dieser Compound, die von der übergebenen Compound gebunden wurden.
Sonst kommt es bei folgender Eingabe zu einem bösen Fehler bei folgender Spezifikation
    --->p(a).
    --->p(b).
    --->r(c).
    r(X), p(X) ---> foo(X).
kam als Modell p(a), p(b), r(b) und foo(b), obwohl die letzte Klausel eigentlich unerfüllbar ist! Das lag daran, daß beim Backtracken nicht nur p(a) sondern auch r(a) von der Bindung gelöst wurde.
Wie bereits erwähnt, steht ja an jeder Stelle der klausel die selbe Variablen-Instanz. Beim Matching wurde im ersten Schritt das X in r(X) an c gebunden. Dann wurde versucht p(c) zu beweisen, was nicht gelang, da p(c) nicht zu den Axiomen gehört (d.h. nicht in der Database enthalten war). Da der Versuch des Beweisens scheiterte, wurde ein neuer Versuch gestartet: p(c) wurde von der konstanten c gelöst, und es wurde versucht p(X) zu beweisen. Aber genau das war der Fehler! Das X in p(X) wurde von r(X) an c gebunden, und deshalb darf auch nur r(c) die Variable X von c lösen.
Der oben erwähnte zweite Beweisversuch gelang, p(X) wurde an b gebunden, und damit auch r(X).
Siehe auch in der Domuentation.

Overrides:
unbind in class Term
 o getSubstitutions
 public Term[] getSubstitutions(Compound comp)
Gibt einen Array von Variablen-Bindungen zurück. Genau genommen ist das Array ein Abbild der Position und der Werte der Variablen in der Compound. An jeder Stelle an der eine gebundene Variable steht, steht im zurückgebenen Array der Wert der Variablen.

Es wird entweder ein Array oder null zurückgegeben. Das Array hat an den Positionen, an denen keine Variablen-Werte stehen ebenfalls null stehen.

 o getSubstitutions
 public Term[] getSubstitutions(Atom at)
 o getVarsCopy
 public Term[] getVarsCopy()
 o toString
 public String toString()
Overrides:
toString in class Term
 o internVars
 public void internVars()
Diese Methode wird vom Parser nach dem Parsen aufgerufen, und stellt sicher, daß an jeder Stelle der Compound, an der zwei gleichlautende Variablen stehen, das selbe Var-Objekt steht. Dabei wird ein Vector angelegt (falls keiner übergeben wurde), in den alle Variablen-Objekte hineingeschrieben werden, die bisher vorkamen. Dieser Vector wird an alle in dieser Compound vorkommenden Compounds übergeben, damit alle Variablen, die in den untergeordneten Compounds vorkommen, durch die in dieser Compound vorkommenden Variablen-Objekte ersetzt werden. Damit auch alle Variablen die zwar nicht in dieser, aber in zwei oder mehreren untergeordneten Compounds vorkommen ersetzt werden können, wird der übergebene Vector wieder an die aufrufende Compound zurückgegeben.

 o internVars
 public Vector internVars(Vector var_vec)
Siehe internVars(). Diese Methode ersetzt alle in der Compound enthaltenen Variablen durch die übergebenen, falls sie gleich sind. Von hier aus wird dann internVars() aufgerufen.