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

Grundlagen von Prolog

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Container-Lab11 Min. Lesezeit8 Befehle

Wer ist Cats Großelternteil?

In einem Stammbaum siehst du es, wenn du zwei Linien nach oben folgst. Ein Programm in den meisten Sprachen bräuchte Schritt-für-Schritt-Anweisungen, um dasselbe zu tun. Prolog arbeitet anders: Du schreibst auf, was wahr ist, stellst dann eine Frage, und es findet die Antwort.

Am Ende dieser Lektion

Notiz

Ich kann einem Prolog-Programm Fragen zu Fakten und Regeln stellen.

Schlüsselwörter

  • Fakt: etwas, das dem Programm als wahr mitgeteilt wird.
  • Regel: eine Aussage, die wahr ist, wenn andere Aussagen wahr sind.
  • Anfrage: eine Frage, die du dem Programm stellst.
  • Variable: ein Name, der mit einem Großbuchstaben beginnt und für eine gesuchte Antwort steht, zum Beispiel X.
  • Rekursion: eine Regel, die sich selbst benutzt.

Zum Einstieg: was du schon weißt

Notiz

Antworte im Kopf. 1. Wenn x + 2 = 5, was ist x? 2. Was muss in „Wenn es regnet, nimm einen Schirm“ wahr sein, bevor du einen nimmst? 3. Was ist in einem Stammbaum ein Großelternteil? Antworten: 3, weil x für eine Zahl steht, die die Gleichung wahr macht; dass es regnet; ein Elternteil eines Elternteils.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Es gibt einen Container, prolog. Im Browser öffnet sich nichts, also nutze das Terminal, in dem docker exec prolog einen Befehl darin ausführt. Jeder Befehl lädt eine Datei, stellt eine Frage und endet. Alles, was ausgegeben wird, ist Englisch, egal in welcher Sprache diese Seite steht. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).

Ein Fakt ist eine Zeile, die wahr ist

Dieser Befehl gibt die Datei mit den Fakten aus. Jede Zeile wie parent(tom, ann). ist ein Fakt, gelesen als „tom ist ein Elternteil von ann“, und endet mit einem Punkt. Zeilen, die mit % beginnen, sind Kommentare. Prolog weiß nur, was in der Datei steht.

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, ob etwas wahr ist

Der erste Befehl lädt facts.pl und fragt, ob tom ein Elternteil von ann ist. Die Option -g ist das Ziel, das ausgeführt wird, und -t halt beendet danach. Er gibt yes aus, weil der Fakt da ist. Der zweite fragt, ob ann ein Elternteil von dan ist. Das steht nicht in den Fakten: Das Ziel scheitert und es wird nichts ausgegeben. Keine Ausgabe heißt „lässt sich nicht als wahr zeigen“.

Befehl
docker exec prolog swipl -q -g "parent(tom, ann), writeln(yes)" -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.

Befehl
docker exec prolog swipl -q -g "parent(ann, dan), writeln(yes)" -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.

Eine Variable fragt „wer?“

Ein Großbuchstabe macht eine Variable, die Prolog füllt, indem es alle passenden Fakten findet. forall geht jede Antwort durch und writeln gibt sie aus. Der erste Befehl gibt toms Kinder aus, ann und dann ben, in der Reihenfolge, in der die Fakten stehen. Der zweite dreht die Frage um: Wer ist ein Elternteil von ben? Er gibt tom aus.

Befehl
docker exec prolog swipl -q -g "forall(parent(tom, X), writeln(X))" -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.

Befehl
docker exec prolog swipl -q -g "forall(parent(X, ben), writeln(X))" -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.

Prüfe dich

Tipp

Welche Kinder hat ben, und in welcher Reihenfolge würden sie ausgegeben? Antwort: dan und dann eve, weil diese Fakten in dieser Reihenfolge stehen. Für jemanden ohne Kinder wird nichts ausgegeben.

Eine Regel ist wahr, wenn ihre Teile wahr sind

family.pl enthält Regeln. Die Regel grandparent(X, Z) :- parent(X, Y), parent(Y, Z). liest sich „X ist ein Großelternteil von Z, wenn X ein Elternteil von einem Y ist und Y ein Elternteil von Z“. Das :- heißt „wenn“ und das Komma „und“. Niemand hat einen Fakt über Großeltern geschrieben. Dieser Befehl fragt nach toms Enkeln und gibt cat, dan und eve aus.

Befehl
docker exec prolog swipl -q -g "forall(grandparent(tom, X), writeln(X))" -t halt family.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 Regel kann sich selbst benutzen

Ein Vorfahr ist ein Elternteil oder ein Elternteil eines Vorfahren. Die zweite Regel ruft sich selbst auf, sie folgt dem Baum also so weit nach unten, wie er geht. findall sammelt alle Antworten in einer Liste. Der erste Befehl gibt [ann,ben,cat,dan,eve] aus, der zweite, für ann, [cat].

Befehl
docker exec prolog swipl -q -g "findall(X, ancestor(tom, X), L), writeln(L)" -t halt family.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.

Befehl
docker exec prolog swipl -q -g "findall(X, ancestor(ann, X), L), writeln(L)" -t halt family.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.

Ein häufiger Fehler

Warnung

Viele denken, ein Prolog-Programm laufe von oben nach unten, Zeile für Zeile, wie ein Rezept. Das stimmt nicht. Fakten und Regeln sagen, was wahr ist, und die Frage entscheidet, was berechnet wird. Und eine Anfrage, die nichts ausgibt, heißt nicht, dass das Programm kaputt ist oder die Antwort im echten Leben falsch wäre: Sie heißt, dass sich die Antwort aus den aufgeschriebenen Fakten nicht beweisen lässt. Füge einen Fakt hinzu, und dieselbe Frage kann gelingen.

Abschlusskontrolle

Tipp

Antworte, ohne zurückzublättern. 1. Was sagt parent(tom, ann).? 2. Was unterscheidet X von tom? 3. Was bedeutet :- in einer Regel? 4. Wie heißt es, wenn eine Regel sich selbst benutzt? Antworten: tom ist ein Elternteil von ann, und es ist ein Fakt; X beginnt mit einem Großbuchstaben, ist also eine gesuchte Variable; „wenn“; Rekursion.

Für Lehrkräfte

Tipp

Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab durchgeführt wird: Die Schritte und die Schaltflächen Ausführen sind die Lektion, und das Lab ist die Kopie jedes Lernenden. Das Lab ist ein Container mit dem Interpreter SWI-Prolog und drei kleinen Dateien, und hier wird nichts automatisch bewertet: Die Lernenden geben die Fragen ab, die sie gestellt haben, mit der jeweiligen Antwort, eine eigene Regel in family.pl mit einer Frage, die sie in Aktion zeigt, und einen Satz dazu, wie sich ein Fakt von einer Regel unterscheidet. Kernpunkte: 1. Ein Fakt ist eine Aussage, die wahr ist. 2. Eine Anfrage fragt, ob etwas wahr ist, und eine Variable fragt „wer“. 3. Eine Regel ist wahr, wenn ihre Teile wahr sind. 4. Eine Regel, die sich selbst benutzt, folgt einer Struktur so weit, wie sie geht. Häufiger Fehler: ein Programm als Liste von Anweisungen zu lesen oder keine Ausgabe als „falsch“. Material: das Lab und sein Terminal. Tipp: Lassen Sie die Antworten vor dem Ausführen vorhersagen, dann einen Fakt hinzufügen und sehen, was sich ändert. Die Antworten sind genau und jedes Mal gleich, in der Reihenfolge der Fakten. Namen und alle Meldungen sind Englisch, egal in welcher Sprache die Seite steht.

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

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.