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.
-
Compound(FkSymbol)
-
-
Compound(FkSymbol, Vector)
-
-
bindTo(Term[])
-
-
clonedValue()
-
-
cloneYourValue()
- Im ersten Schritt müssen alle Values geklont werden.
-
equals(Object)
-
-
getSubstitutions(Atom)
-
-
getSubstitutions(Compound)
- Gibt einen Array von Variablen-Bindungen zurück.
-
getVarsCopy()
-
-
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.
-
internVars(Vector)
- Siehe
internVars()
.
-
matches(Term, Compound)
- Matcht einen Term, wenn er eine Compound oder eine Var ist.
-
predicate()
- Gibt Prädikatsymbol und Stelligkeit aus.
-
toString()
-
-
unbind(Compound)
- Diese Methode entbindet nur die Variablen in dieser Compound,
die von der übergebenen Compound gebunden wurden.
-
value()
-
Compound
public Compound(FkSymbol fs,
Vector t)
Compound
public Compound(FkSymbol fs)
equals
public boolean equals(Object ob)
- Overrides:
- equals in class Object
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
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.
value
public Term value()
- Overrides:
- value in class Term
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
clonedValue
public Term clonedValue()
- Overrides:
- clonedValue in class Term
bindTo
public void bindTo(Term werte[])
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
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.
getSubstitutions
public Term[] getSubstitutions(Atom at)
getVarsCopy
public Term[] getVarsCopy()
toString
public String toString()
- Overrides:
- toString in class Term
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.
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.