220 likes | 363 Views
Syntax von Prolog & Familiendatenbasis. Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de. Syntax von Prolog. Die Syntax von Prolog beschreibt die Menge der wohlgeformten Ausdrücke in Prolog.
E N D
Syntax von Prolog&Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de
Syntax von Prolog • Die Syntax von Prolog beschreibt die Menge der wohlgeformten Ausdrücke in Prolog. • Wir kennen bereits einige grundlegende Konzepte wie Fakten, Regeln, Klauseln, Anfagen, Prädikate, Argumente, Variablen, Funktoren, ... GK Prolog - Syntax, Familiendatenbasis
Terme • Die grundlegende Datenstruktur in Prolog ist der Term. Terme werden aus ASCII-Zeichen gebildet. • A B C ... X Y ZGroßbuchstaben • a b c ... x y zKleinbuchstaben • 1 2 3 ... 8 9 0Ziffern • + - * / \ ^ [ ]Sonderzeichen • ( ) ~ : . ? , ; GK Prolog - Syntax, Familiendatenbasis
Sorten von Termen • Terme • einfach zusammengesetzt • Atome Zahlen Variablen Strukturen Listen • (Prädikate) • Integers Reals GK Prolog - Syntax, Familiendatenbasis
Atome • Atome sind Zeichenfolgen, die mit einem Kleinbuchstaben beginnen. Der Rest eines Atoms kann aus Klein- oder Großbuchstaben und Ziffern bestehen, aber keine Sonderzeichen außer „_“ (Unterstrich) enthalten. • wir sind vier atome ichBinAtomNr5ich_bin_atom_frieda GK Prolog - Syntax, Familiendatenbasis
Hochkommata • Durch einfache Hochkommata kann man beliebige Zeichenfolgen „zwangsatomisieren“. • `Ich bin ein Atom.` • `0815` • `°!^/{?#*§@` GK Prolog - Syntax, Familiendatenbasis
Variablen • Variablen sind Zeichenfolgen, die mit einem Großbuchstaben oder „_“ beginnen. Bis auf nicht vorhandene Zwangsvariabilisierung gilt für den Rest das gleiche wie für Atome. • X • Fritz • _ich_bin_eine_Variable GK Prolog - Syntax, Familiendatenbasis
Variablenidentität • Die anonyme Variable besteht lediglich aus einem Zeichen: „_“ (Unterstrich). Im Gegensatz zu anderen Variablen kann man mit anonymen Variablen keine Variablengleichheit erzielen. • liebt(X,Y).nicht notwendigerweise gleich • liebt(X,X).notwendigerweise gleich • liebt(_,_).nicht notwendigerweise gleich GK Prolog - Syntax, Familiendatenbasis
Interne Variablen • Arity Prolog 6.1 verwendet intern eine standardisierte Darstellung für Variablen: 4-stellige Hexadezimalzahlen mit führendem Unterstrich. • ?- X = Y. • X = _0F5A • Y = _0F5A • yes GK Prolog - Syntax, Familiendatenbasis
Integers (Ganze Zahlen) -2487 -1 0 3 455 Reals (Fließkommazahlen) -2487.0 1.34 0.0 .5 122.345e25 Zahlen GK Prolog - Syntax, Familiendatenbasis
Strukturen • Strukturen sind zusammengesetzte Terme und bestehen aus Funktor und einer Folge von Argumenten, die in Klammern eingeschlossen und durch Kommata getrennt werden. • funktor(Arg1,..., Argn) • Funktoren sind Atome, Argumente sind Terme. GK Prolog - Syntax, Familiendatenbasis
Beispiel-Strukturen • mensch(sokrates) • student(name(vorname(berti), • nachname(vogts)), • matrikelnr(4711)) GK Prolog - Syntax, Familiendatenbasis
Operatoren • Die Funktoren von 1- oder 2-stelligen Strukturen können auch als Operatoren definiert sein. • Beispiele: • a :- b:- Infixoperator :-(a,b) • a. . Postfixoperator .(a) • -235 - Präfixoperator -(235) GK Prolog - Syntax, Familiendatenbasis
Fakten • Fakten sind Prädikate, die mit einem Punkt abgeschlossen sind. Der Funktor darf nicht „:-“ sein. • mensch(sokrates) • mensch(sokrates). GK Prolog - Syntax, Familiendatenbasis
Regeln • Regeln sind 2-stellige Prädikate mit dem Funktor „:-“, die mit einem Punkt abgeschlossen sind. • Das erste Argument (Head) ist ein Prädikat. • Das zweite Argument (Body) ist ein Prädikat oder eine Disjunktion oder Konjunktion von Prädikaten. • Es handelt sich bei :-/2 um ein vordefiniertes Prädikat (builtin), das eine besondere Interpretation hat. GK Prolog - Syntax, Familiendatenbasis
Programme • Programme in Prolog sind Mengen von Klauseln. • Klauseln • FaktenRegeln GK Prolog - Syntax, Familiendatenbasis
Familiendatenbasis Verwandtschaftsbeziehungen als Anwendungsfeld für Relationen mit verschiedenen Eigenschaften.
Ein Stammbaum • terachm • sarahf abrahamm nachorm haranm • isaacm milcahf lotm yiscahf GK Prolog - Syntax, Familiendatenbasis
Elternteile et(terach,abraham). et(terach,nachor). et(terach,haran). et(sarah,isaac). et(abraham,isaac). et(haran,milcah). et(haran,lot). et(haran,yiscah). Geschlecht fem(sarah). fem(milcah). fem(yiscah). masc(terach). masc(abraham). masc(nachor). masc(haran). masc(isaac). masc(lot). Prolog-Repräsentation GK Prolog - Syntax, Familiendatenbasis
Vater, Mutter vater(X,Y):- et(X,Y), masc(X). mutter(X,Y):- et(X,Y), fem(X). Sohn, Tochter sohn(X,Y):- et(Y,X), masc(X). tochter(X,Y):- et(Y,X), fem(X). Direkte Beziehungen GK Prolog - Syntax, Familiendatenbasis
Indirekte Beziehungen • Großvater • großvater(X,Y):- • vater(X,Z), et(Z,Y). • Bereits definierte Relation vater/2 kann wiederverwendet werden. Eine dritte Person Zwird benötigt, um die Beziehung zu vermitteln. GK Prolog - Syntax, Familiendatenbasis
Rekursion • Vorfahr • vorfahr(X,Y):- et(X,Y). • vorfahr(X,Y):- et(X,Z), vorfahr(Z,Y). • Das rekursive Prädikat vorfahr/2 berechnet die transitive Hülle des Graphen, der durch das Prädikat et/2 induziert wird. GK Prolog - Syntax, Familiendatenbasis