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

Post on 05-Apr-2015

116 views 0 download

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

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

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 ( ) ~ : . ? , ;

25.10.99 GK Prolog - Syntax, Familiendatenbasis

4

Sorten von Termen

Terme

einfach zusammengesetzt

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

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

25.10.99 GK Prolog - Syntax, Familiendatenbasis

6

Hochkommata

Durch einfache Hochkommata kann man beliebige Zeichenfolgen „zwangsatomisieren“.

`Ich bin ein Atom.` `0815`

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

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

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

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

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

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.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

12

Beispiel-Strukturen

mensch(sokrates)

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

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)

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

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.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

16

Programme

Programme in Prolog sind Mengen von Klauseln.

Klauseln

Fakten Regeln

Familiendatenbasis

Verwandtschaftsbeziehungen als Anwendungsfeld für Relationen mit

verschiedenen Eigenschaften.

25.10.99 GK Prolog - Syntax, Familiendatenbasis

18

Ein Stammbaum

terachm

sarahf abrahamm nachorm haranm

isaacm milcahf lotm yiscahf

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

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

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.

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.