Eingabe in Prolog

8

Ich arbeite gerade an einem rekursiven Prolog-Programm, um Routen miteinander zu verbinden, um ein basic GPS der Gegend von Birmingham zu erstellen. Im Moment kann ich wie folgt ausgegeben werden:

Eingabe

%Vor%

Ausgabe

%Vor%

Was ich gerne tun würde, ist, dass mein Programm eine Art Schnittstelle bereitstellt, also wenn ich etwas in die Richtung eingeben würde:

%Vor%

Es würde mir Folgendes bieten:

%Vor%

Prolog ist eine mächtige Sprache, also nehme ich an, das ist leicht möglich, aber viele der Bücher, die ich herausgenommen habe, scheinen diesen Teil zu überspringen. Soweit ich weiß, muss ich etwas nach den Regeln von write () und read () verwenden, obwohl mir die Details unbekannt sind.

Könnte hier jemand einen Prolog-Neuling mit ein paar einfachen Beispielen oder Links zu weiteren Informationen herausholen?

BEARBEITEN: Viele dieser Antworten scheinen sehr kompliziert zu sein, wobei die Lösung nur etwa 5-10 Codezeilen umfassen sollte. Das Einlesen eines Wertes ist kein Problem, da ich etwas wie folgt machen kann:

%Vor%

Ich würde es bevorzugen, wenn die Ausgabe mit write () geschrieben werden könnte, so dass eine neue Zeile (nl) verwendet werden kann, so dass sie wie die obige Ausgabe angezeigt wird.

Wenn das meine Eingabe wäre, wie würde ich dann den oberen routplan () anordnen, um mit diesen Eingaben zu arbeiten? Wenn ich die Linien für diese Stationen als zusätzlichen Parameter hinzufügen würde, wie würde dies dann implementiert werden? Alle Links sind am Anfang der Datei wie folgt definiert:

%Vor%

Daher wäre es gut mit dieser Information die Zeile so lesen zu können.

%Vor%     
Mike B 24.03.2009, 09:45
quelle

4 Antworten

2

Für diese Art von Dingen erzeuge ich normalerweise Shell-Prädikate. Also in deinem Fall ...

%Vor%

Und print_route / 1 könnte so etwas rekursiv sein:

%Vor%

Ich habe angenommen, dass die 3. Variable des Prädikats routplan / 3 eine Liste von Listen ist. Auch, dass es durch Hinzufügen zum Schwanz gebaut wurde. Wenn nicht, sollte es relativ leicht anzupassen sein. Fragen Sie in den Kommentaren.

    
Tom Wright 02.04.2009, 18:14
quelle
5

Ein Buch, das solche Dinge im Detail diskutiert, ist Natural Language Processing für Prolog-Programmierer von Michael A. Covington.

Was Sie im Allgemeinen tun müssen, ist

  1. Tokenize die Eingabe
  2. Parsen Sie die Tokens (z. B. mit DCG), um die Eingabe für routeplan/3 zu erhalten.
  3. Aufruf routeplan/3
  4. Erzeugen Sie etwas Englisch auf der Basis der Ausgabe von routeplan/3

So ähnlich (funktioniert in SWI-Prolog):

%Vor%     
Kaarel 24.03.2009 11:45
quelle
4

Hm, wenn ich Sie richtig verstehe, wollen Sie die Liste nur zum Ausdrucken formatieren, nein?

In SWI-Prolog funktioniert das:

%Vor%

rufen Sie dann mit

auf %Vor%

Es ist wahrscheinlich nicht sehr effizient, aber es macht den Job. :)

    
pfctdayelise 24.03.2009 10:47
quelle
0

Hier sind einige Prädikate zum Lesen von Zeilen aus einer Datei / einem Stream in eine Prolog-Zeichenfolge:

%Vor%

Sehen Sie sich dann DCG an, um Informationen zum Analysieren einer Zeichenfolge zu erhalten.

    
David Hanak 24.03.2009 10:28
quelle

Tags und Links