2017-11-04 1 views
3

Ich versuche, die Grundlagen von Prolog zu lernen und weiterhin in eine Existenz Fehler mit dem folgenden Code.Prolog Existenz Fehler in grundlegenden Beispiel

comes_after(m1, m2). 
comes_after(m2, m3). 
comes_after(m3, m4). 
comes_after(m4, m5). 
comes_after(m5, m6). 

does_come_after(X, Y) :- comes_after(X, Y). 
does_come_after(X, Z) :- comes_after(X, Y), does_come_after(Y, Z). 

Wenn eine Abfrage wie does_come_after Ausführung (m1, m3) ich folgende Fehlermeldung erhalte.

uncaught exception: error(existence_error(procedure,comes_after/0),does_come_after/0) 

Hier ein Screenshot zeigt den Fehler:

Prolog Error

Was mache ich falsch, und was sollte ich beachten, diese Fehler in Zukunft zu vermeiden? Danke im Voraus.

+0

in Ordnung aussieht, obwohl Ihre Logik does_come_after wahrscheinlich ein wenig fehlerhaft ist. sollte diesen Fehler jedoch nicht verursachen. Wie genau hast du die Logik genannt? – Xaser

+0

Scheint, dass Sie die Datei nicht konsultieren, die die Prädikate enthält ... – coder

+0

Ich habe die Datei konsultiert, und ich habe es mit dem Prädikat comes_after() getestet. Ich habe den Beitrag aktualisiert und den Screenshot auf Einzelheiten überprüft. Vielen Dank! – Zoroshino

Antwort

3

Die Fehlermeldung teilt Ihnen mit, dass Prolog ein Prädikat comes_after/0 erwartet, aber keine gefunden wird. Ferner tritt dieses Problem auf, wenn es aus einem Prädikat does_come_after/0 aufgerufen wird. Jetzt verwenden Ihre Definitionen alle Arity 2. So comes_after/2 und does_come_after/2. Was das System erwartet, kann nicht passieren.

Und wenn dies der Fall ist, muss dies mit Ihrer Installation zusammenhängen. Sie haben 1.4.5, was die neueste Version ist, 1.4.4 die noch aktuelle stabil.

Es ist also möglich, dass Sie ein anderes, älteres System installiert haben, das durch die Bereitstellung eines inkompatiblen pl2wam Compilers gestört wird. Um dies zu überprüfen, sagen Sie which pl2wam oder pl2wam --version.

Insbesondere Versionen von 1.3 oder sogar 1.2 können solche Ergebnisse erzeugen. Es gibt keine Versionsüberprüfung in GNU.

Um sicherzustellen, dass ich immer die richtige Version zu erhalten, sage ich:

export PATH=/opt/gupu/gprolog-1.4.5/bin:${PATH} 
+1

Ja, ich denke du hast recht mit der Versionssache. Sieht so aus, als hätten andere das gleiche Problem: http://lists.gnu.org/archive/html/users-prolog/2017-02/threads.html Ich habe auf 1.4.4 heruntergestuft und das scheint sich gelöst zu haben die Probleme! – Zoroshino

+0

@Zoro: Aktualisiert – false

Verwandte Themen