2016-05-09 26 views
0

In meinem Projekt muss ich eine Liste möglicher Bewegungen erstellen. Ich habe das schon gemacht, aber ich muss die möglichen Züge von vorherigen Zügen filtern. Wie kann ich das machen?Filterelemente einer Liste in Prolog

Von:

PossibleMoves = [(up,1,2),(down,2,4),(left,1,3)], 
PreviousMoves = [(up,1,2),(down,2,4)]. 

An:

PossibleMovesLeft = [(left,1,3)]. 

versuchte ich delete, \+ memberchk, ohne Erfolg. Vielleicht habe ich etwas falsch gemacht.

Antwort

-1

Diese Frage bezieht sich nicht wirklich auf Labyrinthe, es geht nur darum, alle Elemente in einer Liste aus einer anderen Liste zu entfernen. Dafür gibt es ein Prädikat: subtract/3.

subtrahieren (+ Set, + Löschen, -Ergebnis)
Löschen Sie alle Elemente in Delete von Set. Die Löschung basiert auf der Vereinigung mit memberchk/2.

Beispiel Nutzung:

?- subtract([1,2,5,4,3,5,4], [6,2,4], X). 
X = [1, 5, 3, 5] 

Aber wenn nötig, es ist wirklich einfach Ihre eigene Version zu rollen.

+0

'subtrahieren ([X], [], [2]).' Richtig gelingt mit 'X = 2' aber subtrahieren ([X], [1], [2]). 'scheitert, während wiederum 'X = 2, subtrahieren ([X], [1], [2]).' gelingt. – false

+0

@false Ich habe die Frage gelesen, dass "Set" und "Delete" bereits instanziiert sind, also sehe ich kein Problem damit. Sollte eine andere Form benötigt werden, die _produce_ 'Set' erlaubt, sollte es nicht zu schwierig sein, dies zu tun. Was ich versucht habe zu vermitteln, ist, dass die Kernfrage relativ einfach ist - entferne einfach alle Elemente in einer Liste von einer anderen Liste - und dass das OP sich zu sehr auf Labyrinthe konzentriert (ich habe dieses Tag entfernt, da die Frage nichts zu tun hat) mit Labyrinthe). – SQB

+0

Schreiben Sie dann Ihre Annahmen in die Antwort. Denkst du, dass ein Anfänger in der Lage ist, all diese Annahmen zwischen den Zeilen zu lesen? – false

Verwandte Themen