04.11.2014 Aufrufe

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Beispiel: Verwandtschaft again<br />

(Großvater(X, Y ) Ð Vater(X, Z), Mutter(Z, Y )) [Hans/X, Paula/Z, Fritz/Y]<br />

= Großvater(Hans, Fritz) Ð Vater(Hans, Paula), Mutter(Paula, Fritz).<br />

Übersetze dann eine einzelne Klausel D in eine Menge von Klauseln:<br />

D “ tDσ|σ : V arspDq Ñ ConstspP qu<br />

P “ ď DPP<br />

D<br />

Dann erfüllt ein Programm <strong>der</strong> Version 1 ␣Q genau dann, wenn Version 0 ␣Q auch erfüllt:<br />

P ( 1 ␣Q ô P ( 0 ␣Q. Daraus folgt:<br />

• Wir können alle Gro<strong>und</strong> Instances <strong>der</strong> Regeln <strong>und</strong> Fakten verwenden<br />

• ␣Q ” Ž σ:V arspQqÑConstspP q ␣Qσ<br />

#<br />

„no“ bei P * ␣Q<br />

Antwort ist also<br />

σ mit P ( ␣Qσ<br />

Beispiel:<br />

Wir verwenden das gleiche Programm wie oben.<br />

Die Anfrage lautet Q “Ð GrovaterpX, Y q.<br />

Es wird getestet, ob folgen<strong>der</strong> Zusammenhang gilt:<br />

@X, Y, Z.P looooomooooon<br />

universeller Abschluss<br />

hkikj D␣<br />

( loooooooomoooooooon<br />

␣@ X, Y : Q<br />

DX,Y :GpX,Y q<br />

Großvater(Hans, Fritz) Ð Vater(Hans, Paula), Mutter(Paula, Fritz) P P<br />

Da Mutter(Paula, Fritz), Vater(Hans, Paula) P P<br />

gilt P ( ␣QrHans/X, Fritz/Ys. Die Ausgabe von Prolog wäre also: X “ Hans, Y “Fritz.<br />

2.3. Version 2<br />

Damit lassen sich jetzt aber noch keine Datenstrukturen bauen, die wir für unsere fertige Programmiersprache<br />

doch ganz gerne hätten. . .<br />

Prolog mit „echten“ Termen:<br />

Vorrat Σ (Signatur) an Funktionssymbolen f mit endlicher Stelligkeit (Anzahl „Funktionsparameter“)<br />

n ě 0, Notation: f{n P Σ.<br />

E :– X|fpE 1 , . . . , E n q<br />

pF {n P Σq<br />

Beispiel: Liste<br />

Σ “ t<br />

rs{0 lomon<br />

leerer Konstruktor<br />

, r_|_s{2 looomooon<br />

Listenkonkatenation<br />

, 0{0 lomon<br />

Konstante 0<br />

, 1{0 lomon<br />

Konstante 1<br />

Prolog hat keine Konzepte wie »Rückgabewerte« o<strong>der</strong> »Funktionsaufruf«, deshalb drücken wir<br />

das Anhängen eines Elements an eine Liste <strong>und</strong> das Ergebnis in einem dreistelligen Prädikat aus:<br />

append(rs, X, X) (lies: append([], X) = X)<br />

append(rX|Y s, Z, rX|W s) Ð append(Y, Z, W )<br />

u<br />

17

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!