2010-12-31 20 views
2

Ich versuche, ein Wort Rechner zu tun. Lesen Sie Wörter aus einer Datei .. Übersetzen Sie sie in Zahlen und dann berechnen Sie das Ergebnis .. Ich schaffte, all das zu tun, aber ich denke, ich habe zwei Bugs in meinem Programm ..Prolog Backtracking

ich vor allem zwei Funktionen haben ...

Extrakt (Wörter), berechnen (Wörter, 0).

Extrakt wird aus der Datei gelesen .. und dann eine Liste von Worten zurückzukehren .. Ex: [ein, plus, drei] .. jetzt berechnen den Wert für diese Worte in Zahlen übersetzen und berechnen .. i schaffte das auch zu tun .. jetzt sind die Fehler: Ich muss aufhören zu lesen und zu beenden, wenn ich stop in der Datei .. so, wenn Words [Stop] End. Ich habe versucht, die folgenden ...

execute :- 
extract(Words), 
Words = [stop],nl,print('Terminating ...'),!. 
execute :- 
extract(Words), 
calculate(Words,0). 

es endet erfolgreich .. aber es springt Linien, wie ich mehr als einmal zu extrahieren .. i .. zu tun haben versucht

execute :- 
extract(Words), 
Words \= [stop],execute(Words). 
execute(Words) :- 
calculate(Words,0). 

wenn die Worte ist nicht halt .. dann geh und berechne .. aber es funktioniert nicht !!

ich die Hilfe zu schätzen weiß .. Danke

Antwort

3

Nebenwirkungen (hier: aus einer Datei zu lesen und auf die nächste Wahlperiode weitergehen) auf Rückzieher nicht rückgängig gemacht. Sie können einmal lesen und dann die Wahl auf der Lese Begriff machen basierend mit if/then/else oder ein Hilfs Prädikat, zum Beispiel:

execute :- 
     extract(Words), 
     ( Words == [stop] -> nl, write('Terminating ...') 
     ; calculate(Words, 0) 
     ). 

In SWI-Prolog, betrachtet library(pio) für reine Datei mit über beschrieben Lesen , die Backtracking wie erwartet behandelt.

+0

Vielen Dank für die Antwort .. Ich habe versucht, das zu tun .. es fängt den Anschlag .. Drucken .. aber es liest weiter .. ich will es zu stoppen, die Datei zu analysieren und das ist es .. ich kann nicht nur sagen gesehen, erzählt, danach zu stoppen zu lesen .. danke viel .. ich schätze deine hilfe – AhmadAssaf

+1

s (X) für die referenz zu 'pio'. – repeat