2016-05-13 7 views
2

Ich habe ein Problem mit meinem Prolog-Programm. Es wurde entwickelt, um Wörtern in einer erfundenen Sprache die gegebenen Substantive/Verben aus dem Englischen zuzuordnen.Fehler: Typ Fehler: `file_path 'erwartet, gefunden` _G409' (a var)

Jetzt sind wir immer:

ERROR: source_sink `sharks' does not exist ... 
ERROR: Type error: 'file_path' expected, found '_G409' (a var) 

...

translation(Nqrrroah, Nqblubh, Nqflua, Nqdwingi, 
     Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup) :- 
([sharks, goldfishes, hawks, finches, boys, eat, swim, fly], 
    [Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]), 

s([Nqblubh, Mhboa], []), 
s([Nqrrroah, Ukahama, Nqblubh], []), 
s([Nqlhalha, Falup], []), 
s([Nqlhalha, Ukahama], []), 
s([Nqlhalha, Ukahama, Nqflua], []), 
s([Nqflua, Sharabrab], []), 
s([Nqblubh, Falup, Nqdwingi], []), 
s([Nqflua, Ukahama, Nqdwingi], []), 
s([Nqdwingi, Falup, Nqflua], []), 
is_set([Nqrrroah, Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]). %is_set is True if the List is a proper list without duplicates 

Wir definierten unsere Grammatik mit der ganzen Goldfisch, Hai, schwimmen ... vor und das ist absolut richtig funktioniert.

+2

Etwas macht hier keinen Sinn. Was ist der Zweck der Aussage? ([Haie, Goldfische, Falken, Finken, Jungen, iss, schwimmen, fliegen], [Nqrrroah, Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]) '? Es tut nichts. Was den Fehler betrifft, ist es wahrscheinlich etwas in 's', aber Sie haben es nicht gezeigt. – lurker

Antwort

3

tl; dr Prolog liest Top-Level-Listen von Atomen als Anweisungen zum Laden von Quelldateien, die von diesen Atomen benannt werden.

Prolog liest Top-Level-Vorkommen von Atomlisten als Befehl zum Laden einer vom Atom benannten Datei. Obwohl dies heutzutage nicht oft verwendet wird, war es früher als kurze Hand zum Laden von Quelldateien nützlich. Sie könnten einfach ['my_file.pl'] schreiben, um eine Datenbank oder einen Satz von Regeln zu laden. Sie können dies selbst ausprobieren, indem Sie den Namen einer in eckigen Klammern eingeschlossenen Quelldatei in die Eingabeaufforderung der obersten Ebene eingeben, z.

?- [my_file]. 

oder

?- ['my_file.pl']. 

nun in Ihrer ersten Klausel, die erste Zeile im Körper

([sharks, goldfishes, hawks, finches, boys, eat, swim, fly], 
    [Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]), 

Dies entspricht

[sharks, goldfishes, hawks, finches, boys, eat, swim, fly], 
[Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup] 

seit Klammer tun nichts zu einer Konjunktion (dh true, false entspricht (true, false). Prolog liest dies als einen Befehl zum Laden von Dateien mit den Namen sharks, goldfishes usw. und lädt dann die Dateien Nqrrroah usw. Der erste Fehler liegt darin, dass im aktuellen Arbeitsverzeichnis keine Datei mit dem Namen sharks vorhanden ist. Der zweite Fehler ist, weil Prolog einen Dateinamen erwartet, aber stattdessen eine freie Variable erhält.

Ich bin mir nicht sicher, was Sie diese Verbindung von Listen gemeint haben, aber es gibt die Wurzel Ihrer Fehler. :)