florian.rhomberg Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Hallo! Ich soll zusammen mit einem Zweiten für die UNI einen Prolog Interpreter schreiben. Dabei hängen wir bei einem Problem. Eines der Features sollte sein, dass wir eine Ersatzfunktion für copy_term schreiben die das Selbe kann! Und hier hängen wir irgendwie. Wir haben uns gedacht wir schreiben alle Variablen in eine Liste und anschließend weißen wir neue zu. Kann uns vielleicht da jemand helfen, ob das richtig ist bzw. wie er das lösen würde! Vielen Dank, Florian Zitieren
flashpixx Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Sehe ich das absolut richtig, dass ihr einen vollständigen (!) Prolog-Interpreter in Delphi schreiben sollt !? Ist das nicht etwas oversized, denn ihr müsstest dafür erst mal einen Parser mit entsprechend definierter Sprache entwerfen usw. copy_term kopiert ein Prädikat und kopiert den Inhalt der Variablen neuen. AUs der OOP würde ich sagen es entspricht einem deep-copy des Objektes. Oder sollt ihr einzelne Prologbefehle in Prolog selbst neu definieren, d.h. z.b. "kopiere_praedikat" schreiben, das dann den Inhalt kopiert? HTH Phil Zitieren
florian.rhomberg Geschrieben 12. Januar 2008 Autor Geschrieben 12. Januar 2008 Hallo! Nein wir müssen nicht in Delphi einen Interpreter für Prolog schreiben! Ich habe nur kein passenderes Thema im Forum gefunden um die Frage zu stellen. Eine Aufgabe ist z.B.: für Prolog copy_term eine eigene Methode zu entwickeln. Wir haben gestern 6 Stunden daran gearbeitet und haben leide keine Lösung gefunden. Ich habe dann im Internet eine Methode gefunden verstehe Sie aber nicht ganz. Wäre nett wenn mir sie vielleicht jemand erklären könnte! Vielen Danke! Florian :- dynamic copies/1. copy(X,Y) :- assert( copies(X) ) , retract( copies(Y) ) . Zitieren
flashpixx Geschrieben 13. Januar 2008 Geschrieben 13. Januar 2008 Hallo, schau mal hier rein Programmiersprachkonzepte - Logic Programming Prolog Da sind einige Befehle mal erläutert. Vielleicht schreibst Du mal, wenn Du Dir die Seite angeschaut hast, was Dir nicht klar ist HTH Phil Zitieren
florian.rhomberg Geschrieben 13. Januar 2008 Autor Geschrieben 13. Januar 2008 Hallo! Danke für die Antwort! Nun ich habe mir den Syntax angeschaut. Nur konnte das nicht wirklich mein Verständnis verbessern. Ich versuche jetzt einmal mein Problem zu erklären. Was bedeutet: :- dynamic copies/1 ich bin bisher noch nie auf :- dynamic gestoßen, was bedeutet das, außerdem besteht eine Prozedur nicht immer aus 2 Teilen? Anschließend wird mit assert copies(x) ans Ende der Prozedur hinzugefügt.Dann wird die Klausel noch aus der Wissensnbasis gelöscht. Wenn das so stimmt, dann ist mir alles klar bis auf copies(X) bzw. dynamic copies/1. copies/1 bedeutet, dass copies nur ein Argument erwartet!? Ich tue mir mit Prolog nur schwer weil ich halt eher Java, PHP etc. gewöhnt bin! Wäre dankbar für ne Antwort! Leibe Grüße und schönen Sonntag, Florian Zitieren
flashpixx Geschrieben 14. Januar 2008 Geschrieben 14. Januar 2008 Hallo, Wenn das so stimmt, dann ist mir alles klar bis auf copies(X) bzw. dynamic copies/1. copies/1 bedeutet, dass copies nur ein Argument erwartet!? das "dynamic" bedeutet, dass das Prädikat "copies" entfernt bzw. hinzugefügt werden darf. Jedes Prädikat ist normalerweise statisch, d.h. wenn es vorhanden ist, darf es nicht verändert werden, aber genau das willst Du aber, also machst Du es dynamisch. Das "/1" bedeutet, dass Du nur das Prädikat "copies" mit einem Argument dynamisch machst, theoretisch könntest Du ein Prädikat "copies/2" haben, was weiterhin statisch ist. Ich tue mir mit Prolog nur schwer weil ich halt eher Java, PHP etc. gewöhnt bin! logische Sprache != imperative Sprache. Denke nicht in Befehl für Befehl, sondern in logischen Zusammenhängen. Als Literatur kann ich Dir von Ivan Bratko "Prolog for AI" empfehlen. HTH Phil Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.