Prolog - Michael Ziegenbalg - kostenlos E-Book

Prolog E-Book

Michael Ziegenbalg

0,0
0,00 €

oder
-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Prolog ist eine häufig für KI-Programmierung verwendete Programmiersprache, die auf der Prädikatenlogik erster Stufe basiert; 1973 von dem Franzosen Alain Colmerauer entwickelt. Grundlage für den Inferenzalgorithmus ist das Resolutionsverfahren. Künstliche Intelligenz, Programmierung.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Michael Ziegenbalg

Prolog

Eine Einführung

Dieses Buch widme ich allen meinen StudentenBookRix GmbH & Co. KG80331 München

Was ist Prolog ?

Was ist Prolog ?

 

Anmerkung 1:

 

Ein Prologprogramm ist aufgebaut aus Anweisungen, die entweder als Fakten oder als Regeln anzusehen sind. Insbesondere kennt Prolog keine Anweisungen der Art von Wertzuweisungen konventioneller Programmiersprachen, die den Inhalt des Arbeitsspeichers manipulieren.

 

Dadurch wird kein grundsätzlicher Unterschied zwischen dem "Programm" (als Algorithmus) und den "Daten" (die durch einen Algorithmus verarbeitet werden) gemacht. Alle PROLOG-Anweisungen sind insofern gleichartig aufgebaut, als daß die Fakten eine spezielle Darstellungsform der Regeln sind (sie sind nur der Kopf einer Regel ohne Körper).

 

Die Steuerung der Verarbeitung ergibt sich aus den Regeln, insbesondere solchen mit Körpern und in PROLOG eingebauten Mechanismen (wie der Unifikation und dem Backtracking).

 

Grndelemente von Prolog

 

2 Grundelemente  von Prolog

 

Die Frage, wie aus einem Problem eine Problemlösung in PROLOG wird, wollen wir an einem Beispiel studieren.

 

Als Beispiel wollen wir Personen und ihre  verwandtschaftliche Beziehungen untereinander betrachten. Als Ziel sollen Fragen wie

Wer ist Großvater von X ?

oder

            Wer ist Tante von Y?

beantworten können.

 

Die einfachste systematische Lösung bestände darin eine Liste mit allen Verwandten zu einer Person aufstellen, also die Eltern, die Großeltern, alle Geschwister, alle Onkeln, alle Tanten usw.

 

Der Vorteil dieser Lösung besteht darin, daß man alle Fragen sehr schnell beantworten  könnte.

 

Die Nachteile dieser Methode sind vielfältig:

            Heiraten 2 Personen , ergeben sich viele neue

            Verwandtschaftsbeziehungen .

            Möchte man über verwandtschaftliche Beziehungen

            etwas wissen, die noch nicht erfaßt wurden, so erfordert

            dies eine Überarbeitung dieser Liste usw.

 

 

Beispiel:

 

                                  

 

 

 Die Karolinger

 

                   Karl der Große (874)

                            |

                        Ludwig der Fromme (840)

                            |

      ----------------------------------------------------------------

      |                      |                      |        |

Lothar I.       Ludwig der Deutsche       Karl II.

(855)                   (876)               (877)

       |                     |                     |

       |           ------------------------------

       |            |             |              |

     Ludwig II.   Karlmann    Ludwig III.   Karl III.

     (875)         (880)         (882)    (888)

                 Arnulf(889)

                   |

               Ludwig das Kind

                 (911)

 

Aus diesen Diagramm geht z.B. hervor, daß

 

Ludwig der Fromme Vater von Ludwig der DeutscheKarl der Große ist Vater von Ludwig der FrommeLothar I. ist Onkel von Karlmann

 

Nicht erfaßt sind in diesem Diagramm , mit wem die Karolinger jeweils verheiratet sind und welche weiteren verwandtschaftliche Beziehungen sich daraus ergeben.

Eine solche Liste repräsentiert nur Faktenwissen, so müßte auch das Faktum:

Karl der Große ist Vorfahre von Ludwig der Deutsche

            und viele mehr

Diese Anhäufung von Fakten ließe sich stark reduzieren, wenn man mit Hilfe von Regeln aus vorhandenen Fakten weitere erschließen könnte:

 

Beispiel:

Aus:

Karl der Große ist Vater von Ludwig dem FrommenLudwig der Fromme ist Vater von Ludwig der Deutsche

und der Regel:

            1'. Jemand ist Vorfahre von einer Person,

                wenn derjenige  sein Vater ist oder

                wenn derjenige Vorfahre des Vaters der Person ist.

Mit Hilfe dieser Regel läßt sich folgendes aus den obigen Fakten erschließen:

 

            3'. Karl der Große ist Vorfahre von Ludwig dem Frommen

            4'. Ludwig der Fromme ist Vorfahre von Ludwig der Deutsche

 

und  da Karl der Große Vorfahre eines Vorfahren von Ludwig der Deutsche ist, gilt:

 

            5'. Karl der Große ist Vorfahre von Ludwig der Deutsche

 

Programmieren in Prolog entspricht nun durchaus der hier vorgestellten Schlußfolgerungsweise, wobei man in Prolog die Sachverhalte natürlich nicht in Umgangssprache formulieren kann.

 

Eine Programmiersprache  und so auch Prolog, legt fest, welche Zeichenmuster zulässig sind, um daraus Folgen von Befehlen, Tatsachen oder Regeln in der Programmiersprache zu formulieren.

 

Die Tatsache , daß Karl (der Große ) Vater von Ludwig,(dem Frommen), ist, kann man in Prolog wie folgt formulieren:

 

            vater(karl_der_Grosse,ludwig_der_Fromme).

oder

            vater(ludwig_der_Fromme,ludwig_der_Deutsche).

 

Die Regel über die Vorfahren muß mit Hilfe von Variablen formuliert werden. Hierzu muß man wissen, daß in Prolog Variablen dadurch gekennzeichnet werden, daß sie mit einem Großbuchstaben beginnen.

 

Beispiel:                      Person, Name, X

 

Vorfahre: X ist Vorfahre von Y:

 

            vorfahre(X,Y) :- vater(X,Y).

            vorfahre(X,Y) :- vater(X,Z),vorfahre(Z,Y).

                               |

                              AND

 

Regeln sollte allgemeingültig formuliert werden. Diese Formulierung trifft jedoch nur für männliche Vorfahren, weibliche werden nicht erfaßt. Hierzu wäre es notwendig, die Fakten über die Mütter von Personen hinzuzufügen und eine Regel für Eltern zu formulieren:

 

            eltern(X,Y) :- vater(X,Y);mutter(X,Y).

                                                   |

                                                OR

 

mit dieser weiteren Regel  läßt sich der Vorfahre wie folgt umformulieren:

 

            vorfahre(X,Y) :- eltern(X,Y).

            vorfahre(X,Y) :- eltern(X,Z),vorfahre(Z,Y).

 

Diese Form der Regel stellt im Gegensatz zu der Regel über die Eltern gleich eine Besonderheit dar. Während die Regel über die Eltern nur auf die Fakten über Mutter oder Vater Bezug nimmt, nimmt die Regel über die Vorfahren auf den Sachverhalt Vorfahre selber wieder Bezug.

 

Einen solchen Sachverhalt nennt man rekursiv. Der Vorfahre wurde rekursiv definiert.

 

Schlußfolgerung:

 

In Prolog formulierte Programme formulieren Tatsachen (Fakten) und Regeln über das zu lösende Problem.

 

Eine Regel ist allgemein aufgebaut aus einem Kopf(Kopfteil) und einem Rumpf(Rumpfteil):

 

Bei der Regel über die Eltern ist der

 

            Kopf:  eltern(X,Y)

            Rumpf:           vater(X,Y);mutter(X,Y)

 

Kopf und Rumpf werden durch  ":-" miteinander verbunden.

Der Rumpf faßt die Bedingungen zusammen, unter denen die im Kopf formulierte Schlußfolgerung zutrifft: