2016-04-26 5 views
0

Ich versuche, ein Labyrinth-Programm in Prolog zu erstellen, wobei das Ziel ist, eine Route vom Anfang des Labyrinths zu einem Punkt in der Mitte des Labyrinths namens m zu finden . Das Labyrinth besteht aus Quadraten, die in einer von vier Farben verbunden sind: Blau, Grün, Lila oder Orange. Die Route vom Start zum Zentrum folgt einem sich wiederholenden Muster der vier Farben.Nicht Mitglied Regel funktioniert nicht wie erwartet in Prolog

Ich habe den folgenden Code erstellt:

link2(A, Colour, B) :- link(A, Colour, B).  
link2(A, Colour, B) :- link(B, Colour, A). 

changecolour(blue,green). 
changecolour(green,purple). 
changecolour(purple,orange). 
changecolour(orange,blue). 

route(A, Colour1, B, List2) :- 
    link2(A, Colour1, B), 
    append([A], [B], List2). 
route(A, Colour1, B, List2) :- 
    link2(A, Colour1, X), 
    changecolour(Colour1,Colour2), 
    append([A], List, List2), 
    \+ member(A, List), 
    route(X, Colour2, B, List). 

Aus irgendeinem Grund wird der Code funktioniert nicht wie erwartet und ich bin mir nicht sicher, warum. Ich habe das Gefühl, dass es etwas mit der Regel der Negation (nicht Mitglied) zu tun hat, aber kann jemand raten, was ich falsch mache?

+1

Was macht es und was haben Sie erwartet? –

+2

Verwenden Sie 'maplist (dif (A), Ls)', um auf rein logische Weise auszudrücken, dass 'A' nicht in der Liste' Ls' steht. – mat

+0

Ich ziele auf den Prolog, um die Route von Anfang bis m auszudrucken. Prolog fragt jedoch, ob start ein Mitglied einer Liste ist, die nur eine Variable ist, also kehrt G449 zurück, und zwar: Exit: (8) Listen: Mitglied (Start, [Start | _G452])? Schleich. Exit bedeutet Erfolg, aber da wir in dieser Instanz "not member" haben, bedeutet exitting member erfolgreich hier zu versagen. "Nicht Mitglied" sollte nur fehlschlagen, wenn das Programm zu einem Quadrat zurückkehrt, das bereits besucht wurde. –

Antwort

0

Sie haben changecolour definiert und nie verwendet; Sie haben nextcolour verwendet, aber nie definiert.

+0

Dies war ein Fehler, als ich meine Abfrage in Stack-Überlauf eingab. Es war richtig im Programm. –

+0

@ m.lewis1995 es würde sehr hilfreich sein, wenn Sie den tatsächlichen Code in Ihre Frage kopieren/einfügen, mit der Sie Probleme haben. – lurker

+0

Das ist alles Code –

Verwandte Themen