[Code] SWI-Prolog brauche Hilfe

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von taker875, 3. Dezember 2009 .

Schlagworte:
  1. 3. Dezember 2009
    SWI-Prolog brauche Hilfe

    Moin Moin,

    bin gerade dabei (bzw. muss) mir Prolog anzueigenen, aber ich finde einfach kein gutes Tutorial für den SWI-Prolog Editor in der Version 5.6.64... Habe eines gefunden für eine ältere Version aber das funktioniert alles mit dieser Version nicht.
    Wenn irgendwer dies kann oder ein gutes tutorial für mich hat wäre ich sehr dankbar brauche solch ein tutorial wirklich sehr dringend... eine beispiel-datei wäre auch gut
    vielen dank

    mfg
    bw sicher
     
  2. 4. Dezember 2009
    AW: SWI-Prolog brauche Hilfe

    Hmm ja wie erklärt man Prolog....


    Es ist nun mal Regel und Logikbasiert.
    z.B. kannst du dir ne Datei anlegen also Datenbasis, nenne sie zum Beispiel einfach "Beispiel" brauchst keine dateiendung (zumindest sofern du unter Linux arbeitest, ansonsten tuts glaube ich die Dateiendung .pl).

    In diese Datei schreibst du dann deine Daten rein, die sogenannten Fakten. Das sieht dann z.B. so aus:

    Code:
    istReich(billGates).
    istReich(steveJobs).
    istArm(chinamann).
    Dies ist jetzt deine Faktenbasis auf deren Grundlage Prolog dir Ausgaben liefern soll.
    Vielleicht wunderst du dich, dass ich die Sachen kleingeschrieben habe, ABER:
    Alles was mit einem Grossbuchstaben beginnt ist in Prolog eine Variable.
    Also aufpassen bei der Eingabe das du wirklich nur an gewünschten Stellen Grossbuchstaben an Wortanfängen verwendest.

    Wenn du jetzt den Prolog Interpreter startest kannst du deine Faktenbasis aufrufen mit
    Code:
    ['Dateiname'].
    bzw
    Code:
    ['Dateiname.pl'].
    halt je nachdem wie du die Datei genannt hast... evtl. auf Pfadangaben achten, unter Linux Systemen einfach vor dem Compileraufruf im Terminal ins gewünschte Verzeichnis wechseln dann hat man das Problem nicht. ACHTUNG: Die einfachen Anführungszeichen in der Zeile sind keine Platzhalter sondern müssen tatsächlich mit eingegeben werden. Wichtig ist auch das in Prolog Befehle bzw Zeilen mit einem Punkt abgeschlossen werden, den dementsprechend bitte auch nicht weglassen.

    Wenn die Datei erfolgreich geladen wurde kannst du ja mal Probehalber in die Eingabezeile eintippen:
    Code:
    istReich(billGates).
    Wenn alles stimmt sollte diese Ausgabe ein "true" liefern.
    Prolog schaut bei dieser Eingabe dann nach ob sich in den Datensätzen ein Fakt istReich(billGates) befindet oder ob es sich über angegebene Regeln beweisen lässt. Regeln kamen derweil noch nicht vor aber kommt jetzt.

    Regeln sind ähnlich wie z.B. Prozeduren/Funktionen in Java etc, man beginnt es mit dem Namen der Regel, dann folgen die Parameter der Regel, dann ein :- und der Inhalt der Regel, bis sie mit einem . endet. Diese müssen mit in der Datei stehen die du am Anfang lädst. Also lösch die alte bzw ersetze den Inhalt durch:

    Code:
    maennlich(paul).
    maennlich(horst).
    weiblich(jutta).
    weiblichpetra).
    kind(petra, paul).
    
    isMaennlich(X) :- maennlich(X).
    istWeiblich(X) :- weiblich(X).
    vater(X,Y) :- maennlich(X), kind(Y,X).
    Sicherlich erkennst du schon was dies tut. Oben sind einige Fakten zu Personen definiert, unten drei Regeln.
    Gibt man nun im Interpreter ein: istMaennlich(horst). so sollte ein True geliefert werden, Prolog schaut in die Regel istMaennlich, in den Wert X wurde der Eingabe entsprechend horst zwischengespeichert. Nach der Regeldefinition hier ist istMaennlich(X) genau dann wahr, wenn maennlich(X) wahr ist. Und da wir ein maennlich(horst) definiert haben ist alles in Ordnung.
    Sicherlich hätte man diese Regel auch weglassen können und die Aussage direkt mit maennlich(horst) überprüfen können aber das ist ja nur zur Veranschaulichung.

    Was allerdings nett ist an Prolog ist, wenn du einfach eingibst:
    istMaennlich(X).
    Nun liefert Prolog nämlich alle X zurück für die die Regel erfüllt wird, also alle als männlich definierten Personen. Bei der Ausgabe wird jedoch nur erst ein Wert ausgegeben und dann wartet das Programm, drückst du nun Enter wird die Ausgabe abgebrochen, um weitere Werte zu sehen musst du da ein ; tippen (nicht nochmal Enter drücken, das Semikolon wird automatisch erkannt).
    Das ist so, weil das ; in Prolog für das ODER steht (wohlgemerkt kein XOR).
    Dementsprechend steht das , für UND, wie ich es in der Regel vater(X,Y) verwendet habe.
    Die Regel vater soll überprüfen, ob X Vater von Y ist, und zwar ist dies der Fall wenn die Bedingung maennlich(X) erfüllt wird UND die Bedingung kind(Y, X) (also Y ist Kind von X).

    Du kannst Regeln auch ineinander verschachteln, also auch Regelaufrufe innerhalb anderer Regeln verwenden. Du kannst jedoch nicht innerhalb einer Regel eine neue definieren.
    Probier damit erstmal rum ich schau später nochmal rein.
     
  3. 6. Dezember 2009
    AW: SWI-Prolog brauche Hilfe

    Ok erstmal vielen vielen Dank. Die Bw kommt sofort.

    Ich werde das alles morgen mal probieren und damit etwas arbeiten...
    Dann werde ich nochmal schreiben wie es läuft.

    Wie gesagt wenn jemand eine etwas größere Beispieldatei hat dann wäre ich dankbar. Anhand solcher Dateien kann man sich vielen abschauen ...

    Vielen Dank
    und noch einen schönen Rest-Nikolaus
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.