Zusammengesetzte Terme
Beschreibung von Objekten mit komplexeren Einheiten
Objekte einer vorgegebenen Miniwelt können auch mit Hilfe komplexerer Einheiten dargestellt werden. Zunächst zwei Beispiele:
Beispiel: Darstellung des Datums 13.06.2011 - Version 1
geburtstag(datum(13,6,2011)).
Beispiel: Darstellung des Datums 13.06. eine beliebigen Jahres - Version 2
geburtstag(date(y(2011),m(june),d(13))).
Die benutzten Darstellungen datum(13,6,2011)
und date(y(2011),m(june),d(13))
verwenden neben Konstanten (wie 6
oder june
) zusätzlich Funktionssymbole
(wie datum
oder y
). Die Funktionssymbole dienen dazu,
aus den elementaren Bausteinen größere Einheiten zu bilden und die Einheiten mit geeigneten Bezeichnern
zu beschreiben.
Beachte, dass in solchen komplexeren Einheiten auch Variablen vorkommen können, wie das folgende Beispiel zeigt.
Beispiel: Darstellung des Datums 13.06. eines beliebigen Jahres
geburtstag(datum(13,6,Jahr)).
Terme
Terme werden mit Hilfe von Konstanten, Variablen und Funktionssymbolen aufgebaut.
Die Menge der Terme lässt sich so charakterisieren:
Alle Konstanten und Variablen sind Terme.
Wenn f
ein n-stelliges Funktionssymbol ist und t1 ... tn
Terme sind, dann ist auch f(t1 ... tn) ein Term.
Beachte den Unterschied zwischen einem Funktionssymbol (wie z.B. datum
in der Wissensbasis oben)
und einem Prädikatssymbol (wie z.B. geburtstag
in der Wissensbasis oben).
Funktionssymbole werden zur Beschreibung von Objekten benutzt. Ein Term (funktionaler Ausdruck) mit Funktionssymbolen kann Ergebnis einer Anfrage sein und somit ein Objekt darstellen. Das folgende Beispiel zeigt einen solchen Fall.
Wissensbasis:
geburtstag(datum(13,6,Jahr)).
Anfrage:
?- geburtstag(X).
X = datum(13, 6, 2011) ;
No
Prädikatssymbole werden dagegen zur Beschreibung von Sachverhalten benutzt. Ein prädikativer Ausdruck kann (bei passender Belegung der darin vorkommenden Variablen) in Bezug auf die Wissensbasis wahr oder falsch sein.
Listen als Terme
Listen werden in Prolog ebenfalls als Terme behandelt.
Zur Darstestellung von Listen benutzt man normalerweise die Notation mit eckigen Klammern.
So sind []
, [a]
, [a, b]
und [a, [1, 2], [], [d]]
Beispiele für Listen.
Intern benutzt Prolog eine andere Darstellung.
Die folgenden Abfragen mit dem vordefinierten display
-Prädikat verdeutlichen die
hier verwendete Punktnotation.
?- display([]).
[]
Yes
?- display([a]).
.(a, [])
Yes
?- display([a, b]).
.(a, .(b, []))
Yes
?- display([a, [1, 2], [], [d]]).
.(a, .(.(1, .(2, [])), .([], .(.(d, []), []))))
Yes
Diese Punktnotation zeigt, dass Listen letztlich zusammengesetzte Einheiten sind, die den Punkt .
als Funktionssymbol zum Aufbau der Terme benutzen.