Informatikmaterialien 
von Tino Hempel

Startseite | Informatik | Physik | Mathematik | Sonstiges |


Richard-Wossidlo-Gymnasium Ribnitz-Damgarten
Fachbereich Informatik


Aktionsabfragen zur Pflege des Datenbestands


Die Data Manipulation Language (DML) definiert neben dem SELECT-Befehl auch Möglichkeiten zum Löschen, Ändern oder Hinzufügen eines Datensatzes. Diese drei Befehle (DELETE, UPDATE, INSERT) sollen in PROLOG implementiert werden. Dazu wird die Datenbasis dynamisiert. 

Dynamische Datenbasen

Soll eine Datenbasis in PROLOG verarbeitet werden, dann muss diese mit dem Befehl consult in den Arbeitsspeicher des Systems geladen. Die Fakten stehen dann fest und können nicht geändert werden. Erst ein erneuter consult-Aufruf lädt die Daten neu. 

PROLOG bietet aber die Möglichkeit, im Arbeitsspeicher vorhandene Fakten zu manipulieren. Diese müssen dafür in der Datenbasis kenntlich gemacht werden.

Prädikate, die vom PROLOG-Programm selbst geändert werden sollen, werden durch
:- dynamic funktor/stelligkeit
als dynamisch deklariert markiert.

Beispiel: 

:- dynamic mitglied/5.                    % definiert das Prädikat mitglied dynamisch

mitglied(1, 'Hubwieser', 'Jens', m, 1999).
mitglied(6, 'Schmidt', 'Ina', w, 2003).
mitglied(4, 'Müller', 'Ina', m, 1999).

Man kann die dynamische Datenbasis auf dem Bildschirm auflisten. Dazu nutzt man das Prädikat listing(funktor/stelligkeit).

INSERT- und DELETE-Implementation

Für das dynamische Einfügen von Fakten stellt PROLOG die Systemprädikate asserta (Einfügen der Information an den Anfang der Datenbasis) und assertz (Einfügen der Information an das Ende der Datenbasis). Das Löschen eines Faktes ist durch das Systemprädikat retract möglich. Sollen alle Fakten eines Prädikates gelöscht werden, so verwendet man retractall.

Beispiele: 

asserta(mitglied(3, 'Lehmann', 'Paul', m, 2004)).folgt?- listing(mitglied/5).
mitglied(3, 'Lehmann', 'Paul', m, 2004).

mitglied(1, 'Hubwieser', 'Jens', m, 1999).
mitglied(6, 'Schmidt', 'Ina', w, 2003).
mitglied(4, 'Müller', 'Ina', m, 1999).
assertz(mitglied(9, 'Schmidt', 'Toni', m, 2001)).folgt?- listing(mitglied/5).
mitglied(3, 'Lehmann', 'Paul', m, 2004).
mitglied(1, 'Hubwieser', 'Jens', m, 1999).
mitglied(6, 'Schmidt', 'Ina', w, 2003).
mitglied(4, 'Müller', 'Ina', m, 1999).
mitglied(9, 'Schmidt', 'Toni', m, 2001).
retract(mitglied(1, 'Hubwieser', 'Jens', m, 1999)).?- listing(mitglied/5).
mitglied(3, 'Lehmann', 'Paul', m, 2004).
mitglied(6, 'Schmidt', 'Ina', w, 2003).
mitglied(4, 'Müller', 'Ina', m, 1999).
mitglied(9, 'Schmidt', 'Toni', m, 2001).
retractall(mitglied(_,_,_,_,_)).folgt?- listing(mitglied/5).
No.

UPDATE-Implementation

Die Implementation der UPDATE-Funktion erfolgt durch Löschen der alten und Einfügen der neuen Daten.




zur Startseite
© Tino Hempel 1997 - 2007 Im Web vertreten seit 1994.
Eine Internet-Seite aus dem Angebot von Tino Hempel.