Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf...

22
Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf [email protected]

Transcript of Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf...

Page 1: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

Syntax von Prolog&

Familiendatenbasis

Prolog Grundkurs WS 99/00

Christof Rumpf

[email protected]

Page 2: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

2

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, ...

Page 3: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

3

Terme

Die grundlegende Datenstruktur in Prolog ist der Term. Terme werden aus ASCII-Zeichen gebildet.

A B C ... X Y Z Großbuchstaben a b c ... x y z Kleinbuchstaben 1 2 3 ... 8 9 0 Ziffern + - * / \ ^ [ ] Sonderzeichen ( ) ~ : . ? , ;

Page 4: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

4

Sorten von Termen

Terme

einfach zusammengesetzt

Atome Zahlen Variablen Strukturen Listen (Prädikate) Integers Reals

Page 5: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

5

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 ichBinAtomNr5

ich_bin_atom_frieda

Page 6: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

6

Hochkommata

Durch einfache Hochkommata kann man beliebige Zeichenfolgen „zwangsatomisieren“.

`Ich bin ein Atom.` `0815`

`°!^/{?#*§@`

Page 7: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

7

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

Page 8: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

8

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

Page 9: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

9

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

Page 10: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

10

Zahlen

Integers

(Ganze Zahlen)

-2487 -1 0 3 455

Reals

(Fließkommazahlen)

-2487.0 1.34 0.0 .5 122.345e25

Page 11: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

11

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.

Page 12: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

12

Beispiel-Strukturen

mensch(sokrates)

student(name(vorname(berti), nachname(vogts)), matrikelnr(4711))

Page 13: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

13

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)

Page 14: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

14

Fakten

Fakten sind Prädikate, die mit einem Punkt abgeschlossen sind. Der Funktor darf nicht „:-“ sein.

mensch(sokrates)

mensch(sokrates).

Page 15: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

15

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.

Page 16: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

16

Programme

Programme in Prolog sind Mengen von Klauseln.

Klauseln

Fakten Regeln

Page 17: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

Familiendatenbasis

Verwandtschaftsbeziehungen als Anwendungsfeld für Relationen mit

verschiedenen Eigenschaften.

Page 18: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

18

Ein Stammbaum

terachm

sarahf abrahamm nachorm haranm

isaacm milcahf lotm yiscahf

Page 19: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

19

Prolog-Repräsentation

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).

Page 20: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

20

Direkte Beziehungen

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).

Page 21: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

21

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 Z wird benötigt, um die Beziehung zu vermitteln.

Page 22: Syntax von Prolog & Familiendatenbasis Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

22

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.