Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Prolog: Fakten und Anfragen

Nach dieser Lektion: Ich kann Fakten in Prolog aufschreiben und dem System eine Frage dazu stellen.

Lektion, 60 Min.6 BefehleProlog-Lab: logische Programmierung mit Fakten, Regeln und Fragen, im Browser

Was ist logische Programmierung mit Prolog?

Prolog ist eine Programmiersprache, in der ein Programm aus Fakten und Regeln besteht. Sie stellen eine Frage, und Prolog sucht selbst alle passenden Antworten.

Ein Beispiel: Eine Bäckerei kennt die Preise ihrer Waren. Sie fragen „Was kostet Brot?“ und bekommen die Antwort aus den bekannten Tatsachen, ohne eine Suchschleife zu schreiben.

Am Ende dieser Lektion

Notiz

Ich kann Fakten in Prolog aufschreiben und dem System eine Frage dazu stellen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Fakteine Aussage, die wir als wahr festlegenpreis(brot, 3).
Prädikatder Name vor der Klammer, er sagt, wovon der Fakt handelt
Atomein Name in Kleinbuchstaben ohne weitere Bedeutungbrot
Variableein Platzhalter, der mit einem Großbuchstaben beginntPreis
Anfrageeine Frage, die wir Prolog stellen
Unifikationder Abgleich, ob zwei Ausdrücke gleich werden können

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Fakt hält eine Tatsache fest

Ein Fakt ist eine Aussage, die wir als wahr festlegen. Er besteht aus einem Prädikat und Werten in Klammern, am Ende steht ein Punkt.

preis(brot, 3). liest sich: „Der Preis von Brot ist 3.“ Die Werte brot und 3 heißen Atome und Zahlen. Ein Atom beginnt mit einem Kleinbuchstaben.

Drei Fakten einer Bäckerei

Code: prolog
% Beispiel: Fakten einer Bäckerei.
preis(brot, 3).
preis(milch, 2).
vorrat(brot, ja).

Das Lab spricht Englisch

Tipp

Die Dateien des Labs und alles, was Prolog ausgibt, sind englisch: Namen wie parent und colour, Fehlermeldungen, die Wörter true und false. Das ist die Sprache des Werkzeugs. Die Erklärungen hier bleiben deutsch.

Die Fakten des Labs ansehen

Befehl
docker exec prolog cat facts.pl

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Anfrage fragt mit einer Variable

Eine Anfrage sieht aus wie ein Fakt, aber mit einer Variablen an der Stelle, die Sie wissen wollen. Eine Variable beginnt mit einem Großbuchstaben, etwa X oder Preis.

Prolog sucht alle Fakten, die passen, und füllt die Variable mit dem, was dort steht. Die Anfrage parent(tom, X) fragt: „Wer ist ein Kind von tom?“

Alle Antworten einer Anfrage ausgeben

Befehl
docker exec prolog swipl -q -g "forall(parent(tom, X), (write(X), nl))" -t halt facts.pl

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Antworten in einer Liste sammeln

Befehl
docker exec prolog swipl -q -g "findall(K, parent(ben, K), L), write(L), nl" -t halt facts.pl

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Prolog gleicht Muster mit Fakten ab

Hinter jeder Anfrage steht die Unifikation: Prolog prüft, ob sich Anfrage und Fakt durch Einsetzen für Variablen gleich machen lassen. Die Namen müssen gleich sein, die Zahl der Werte auch.

Passt es, erhält die Variable den Wert. Passt es nicht, probiert Prolog den nächsten Fakt.

Beispiel: wann ein Muster passt

MusterFaktPasst?
preis(brot, X)preis(brot, 3)Ja, X ist 3
preis(milch, 3)preis(milch, 2)Nein, 3 ist nicht 2
preis(W, P)preis(brot, 3)Ja, W ist brot und P ist 3
preis(brot, X)vorrat(brot, ja)Nein, anderes Prädikat

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Zwei Muster gleich machen

Befehl
docker exec prolog swipl -q -g "preis(brot, P) = preis(W, 3), write(W-P), nl" -t halt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Muster, die nicht passen

Befehl
docker exec prolog swipl -q -g "( preis(brot, 3) = preis(milch, 3) -> writeln(passt) ; writeln(passt_nicht) )" -t halt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, die Antwort „nein“ heiße, die Aussage sei falsch in der Wirklichkeit. Prolog kennt nur seine Fakten. Steht kein passender Fakt da, lautet die Antwort nein, auch wenn die Sache stimmen könnte. Fehlt der Preis von Käse, ist „Käse kostet etwas“ für Prolog nicht beweisbar.

Kein Fakt, also keine Antwort

Befehl
docker exec prolog swipl -q -g "assertz(preis(brot, 3)), ( preis(kaese, _) -> writeln(ja) ; writeln(nein) )" -t halt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Abgleichen selbst nachbauen

Um zu sehen, was Prolog tut, bauen Sie das Abgleichen in Python nach. Ein Fakt ist eine Liste von Wörtern, ein Muster ebenso. Ein Wort mit Großbuchstaben vorn ist eine Variable und passt auf alles.

Sie schreiben drei kleine Funktionen: ist_variable, passt und treffer. Danach ist Prologs Anfrage kein Zauber mehr, sondern eine Schleife über die Fakten.

Über dieses Lab und seinen Quellcode: Prolog-Lab: logische Programmierung mit Fakten, Regeln und Fragen, im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.