Prolog Syntax, Semantik und 4-Port

Werbung
Prolog als Datenbanksprache - Syntax
Prädikat
=Relation
=Prozedur
student(
student(
student(
student(
Konstanten
Integer
1000
1001
1002
1003
Keine Lücke !
,
,
,
,
‘Anna‘
‘Rita‘
‘Peter‘
‘Peter‘
Atom
klein oder in ‘ ‘
, ‘Arm‘ ,
‘ti2‘
, ‘Reich‘ , ‘ti2‘
, ‘Reich‘ ,
‘ti2‘
, ‘Petersen‘ , ‘ti2‘
).
).
).
).
Tupel=Fakt
=Datensatz
Goal = Subquery
?- student( M, V, _, _ ) .
Variablen anonyme Variablen
Training IT-Grundlagen
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/1
Prolog als Datenbanksprache - Syntax
Regel:
Head = Regelkopf = View
Goal = Subquery
Subquery
pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) .
?- pflichten( 1000 , _ , _ , _ , F ) .
Anfrage = Query
Training IT-Grundlagen
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/2
Prolog als Datenbanksprache - Syntax
Regel:
Head = Regelkopf = View
Goal = Subquery
Subquery
pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) .
?- pflichten( 1000 , _ , _ , _ , F ) .
Training IT-Grundlagen
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/3
Deklarative und prozedurale Semantik
Prolog:
pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) .
Prädikatenlogik
pflichten( M, V, N, S, F ) <= student( M, V, N, S ) Λ kurs( S, F ) .
falls
und
Relationale Algebra
pflichten( M, V, N, S, F ) := student
|X|
kurs
4 = 1
SQL
Create view
Pflichten
as select * from student S, kurs K
where S . S = K . S
Training IT-Grundlagen
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/4
Prozedurale Semantik : 4 Port-Modell
pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) .
?- pflichten( M, V, N, S, F ).
C C
F
C
E
E
E
R
R
R
F
C=Call
C
F
E=Exit R=Redo
Training IT-Grundlagen
F
F=Fail
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/5
pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) .
void pflichten( M, V, N, S, F )
{ // call-Port von Student
AS = student . liesAlle( M, V, N, S ) ;
while ( Student1 = AS. next( ) )
{ // exit-Port von Student und call-Port von Kurs
AK = kurs . liesAlle( S, F ) ;
while ( Kurs1 = AK. next( ) )
{ // exit-Port von Kurs und call-Port von Ausgabe
Ausgabe( M, V, N, S, F ) ;
// fail-Port von Ausgabe und redo-Port von Kurs
}
// fail-Port von Kurs und redo-Port von Student
}
// fail-Port von Student
}
Training IT-Grundlagen
22.-23.11.2001 - Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/6
Herunterladen