Prolog online - IDE, Editor, Compiler, Interpreter

RSS

Führen Sie Prolog-Programme online mit nach WebAssembly kompiliertem SWI-Prolog aus: Fakten, Regeln, Rekursion, findall und format – mit Anzeige von Fehlern und Warnungen.

SWI-Prolog 10 (swipl-wasm) · Läuft in Ihrem Browser – Ihr Code erreicht nie unsere Server.
main.plProlog
Ausgabe

            
        
Ctrl/⌘ + Enter zum Ausführen

Funktionen des Online-Prolog-Compilers (IDE, Editor & Interpreter)

Schreiben, ausführen und testen Sie Prolog-Code kostenlos online. Diese Seite ist Online-Prolog-IDE, Code-Editor, Compiler und Interpreter in einem: Code eingeben, auf „Ausführen“ klicken und sofort die Ausgabe sehen. Alles läuft in Ihrem Browser – nichts zu installieren, kein Konto nötig.

  • Code sofort ausführen: SWI-Prolog 10 (swipl-wasm), Ausgabe nach dem ersten Laden in weniger als einer Sekunde.
  • Code-Editor: Syntaxhervorhebung, Zeilennummern, Klammerzuordnung und automatisches Schließen von Klammern.
  • Klare Fehlermeldungen: Fehlermeldungen und Warnungen erscheinen im Ausgabebereich – genau wie auf Ihrem eigenen Computer.
  • Vollbild: Ctrl/⌘ + Shift + F, anpassbare Schriftgröße, Layout nebeneinander oder untereinander und skalierbare Bereiche.
  • Automatisches Speichern: Ihr Code bleibt in Ihrem Browser gespeichert; laden Sie ihn als main.pl herunter oder kopieren Sie ihn mit einem Klick.
  • Gefahrlos experimentieren: Ein Zeitlimit und eine Stopp-Schaltfläche beenden Endlosschleifen.
  • Privat: Die Prolog-Laufzeitumgebung läuft auf Ihrem Gerät, Ihr Code wird also nie hochgeladen.
  • Dunkelmodus und Tastenkürzel: Ctrl/⌘ + Enter führt den Code aus.
  • Kostenlos: keine Anmeldung, keine Nutzungslimits.

Weitere Programmiersprachen lernen

So nutzen Sie den Online-Prolog-Compiler

  1. Schreiben Sie Ihre Fakten und Regeln in den Editor oder beginnen Sie mit dem Beispiel über Beispiel zurücksetzen.
  2. Legen Sie fest, was ausgeführt wird: mit einer Direktive :- initialization(main)., wobei main ein Prädikat ist, das die gewünschten Ziele aufruft und die Ergebnisse ausgibt.
  3. Drücken Sie Ausführen oder nutzen Sie Strg + Enter (⌘ + Enter auf dem Mac). Das Programm wird als Datei main.pl geladen, und seine Direktiven laufen beim Laden.
  4. Im Bereich Ausgabe sehen Sie ausgegebenen Text, Fehler und Warnungen. Wählen Sie ein Zeitlimit von 5, 15 oder 60 Sekunden und nutzen Sie Stopp, wenn eine Rekursion nie endet.

Die SWI-Prolog-Laufzeitumgebung ist etwa 4 MB groß und wird nach dem ersten Besuch von Ihrem Browser zwischengespeichert. Sichern Sie Ihr Programm mit Kopieren oder dem Download main.pl, ändern Sie die Textgröße mit A− und A+, wechseln Sie die Anordnung der Bereiche mit der Layout-Schaltfläche und nutzen Sie Vollbild (Strg/⌘ + Umschalt + F, mit Esc beenden) für längere Programme.

Alles läuft in Ihrem Browser. Das Programm wird nie an einen Server gesendet, und der Editor speichert Ihre letzte Version nur im lokalen Speicher Ihres Browsers.

Was unterstützt wird

Die Seite nutzt SWI-Prolog 10, kompiliert zu WebAssembly (swipl-wasm). Es ist das echte SWI-Prolog-System und kein vereinfachter Interpreter.

  • Laden einer Datei: Ihr Code wird genau so geladen, wie es consult('main.pl') täte, daher funktionieren Klauseln, Operatoren und Direktiven.
  • Ausgabeprädikate: format/2, write/1, writeln/1, print/1 und nl/0 geben alle im Ausgabebereich aus.
  • Listen- und Alle-Lösungen-Prädikate: member/2, append/3, length/2, msort/2, findall/3, bagof/3, setof/3, forall/2.
  • Arithmetik mit is/2 und den Vergleichsoperatoren, für Ganzzahlen und Gleitkommazahlen. Die Fakultät 20! aus dem Beispiel wird exakt berechnet.
  • Diagnosemeldungen, wie SWI-Prolog sie ausgibt, zum Beispiel Warnungen zu Singleton-Variablen und Fehler wie ERROR: ... Arithmetic: `foo/0' is not a function.

Was sich von einem Desktop-Prolog unterscheidet:

  • Es gibt keine interaktive ?--Abfrageaufforderung, Sie können also keine Anfragen eintippen und mit ; weitere Antworten anfordern. Setzen Sie die Anfragen in main und geben Sie die Antworten aus oder sammeln Sie alle mit findall/3 oder forall/2.
  • Keine Standardeingabe. read/1 hat nichts zu lesen; schreiben Sie Ihre Testdaten daher als Fakten.

Prolog-Grundlagen in einem Programm

% Fakten
likes(mary, wine).
likes(john, wine).
likes(john, mary).

% Eine Regel: X und Y sind befreundet, wenn beide dasselbe mögen
friends(X, Y) :- likes(X, Z), likes(Y, Z), X \== Y.

% Rekursion über eine Liste, mit einem Akkumulator
sum_list_acc([], Acc, Acc).
sum_list_acc([H|T], Acc0, Sum) :- Acc1 is Acc0 + H, sum_list_acc(T, Acc1, Sum).

% Der Cut (!) legt sich auf die erste passende Klausel fest
max(X, Y, X) :- X >= Y, !.
max(_, Y, Y).

main :-
    findall(X-Y, friends(X, Y), Pairs), writeln(Pairs),
    sum_list_acc([1,2,3,4], 0, S), format("sum = ~w~n", [S]),
    max(3, 7, M), format("max = ~w~n", [M]).

:- initialization(main).

Beim Ausführen werden [mary-john,john-mary], sum = 10 und max = 7 ausgegeben.

Häufige Stolperfallen

  • = ist Unifikation, keine Zuweisung und keine Arithmetik. X = 1 + 2 bindet X an den Term 1+2. Verwenden Sie X is 1 + 2, um ihn auszuwerten, und =:=, um zwei Zahlen zu vergleichen.
  • Variablen beginnen mit einem Großbuchstaben oder _. name ist ein Atom und Name ist eine Variable; ein Tippfehler in der Groß-/Kleinschreibung ändert daher stillschweigend die Bedeutung einer Klausel.
  • Singleton-Warnungen bedeuten, dass eine Variable in einer Klausel nur einmal vorkommt, was meist ein Tippfehler ist. Benennen Sie sie in _ oder _Name um, wenn sie absichtlich ungenutzt ist.
  • Setzen Sie den Cut mit Bedacht ein. Das obige max/3 ist für max(3, 7, M) in Ordnung, aber die zweite Klausel hängt vom Cut ab, sodass max(5, 3, 3) fälschlich erfolgreich ist. Mit max(X, Y, Y) :- X < Y. als zweiter Klausel wird es sicher. Ein falsch platzierter Cut kann auch Lösungen verbergen, die findall sonst zurückgeben würde.
  • Linksrekursion läuft endlos. Eine Regel wie ancestor(X, Y) :- ancestor(X, Z), parent(Z, Y). rekursiert ohne Ende. Setzen Sie das Ziel parent an den Anfang.
Tipp: Schlägt main fehl, statt erfolgreich zu sein, gibt SWI-Prolog eine Warnung aus, dass das Initialisierungsziel fehlgeschlagen ist. Fügen Sie zwischen den Zielen writeln/1-Aufrufe ein, um zu sehen, wie weit es kommt.

Häufig gestellte Fragen

Wie führe ich eine Abfrage aus?

Schreiben Sie sie in ein Prädikat wie main und fügen Sie am Ende der Datei :- initialization(main). hinzu. Sie können ein Ziel auch direkt in eine Direktive setzen, zum Beispiel :- X is 2^10, writeln(X).

Ist das Standard-Prolog?

Es ist SWI-Prolog, das dem ISO-Standard folgt und viele Erweiterungen ergänzt. Text in doppelten Anführungszeichen ist in SWI-Prolog ein String, was wichtig ist, wenn Sie gewohnt sind, dass er eine Liste von Zeichencodes bedeutet.

Kann ich jede Antwort auf eine Abfrage erhalten?

Ja. Nutzen Sie findall/3, um sie in einer Liste zu sammeln, oder forall/2, um jede einzeln auszugeben, wie es das Beispielprogramm tut.

Gibt es andere logische oder funktionale Sprachen?

Probieren Sie den Online-Scheme-Interpreter oder den Online-Clojure-Compiler oder sehen Sie sich alle Online-Compiler an.

Aktualisiert

Kommentare

Noch keine Bewertungen

Melden Sie sich an, um dieses Tool zu bewerten.

Teilen Sie einen Tipp, stellen Sie eine Frage oder erzählen Sie, wie das Tool bei Ihnen funktioniert hat.

Noch keine Kommentare. Erzählen Sie als Erste oder Erster, wie es lief.

In die Zwischenablage kopiert