Ich schreibe AI für einen Fox and Geese Spieltyp. Einer meiner Prädikate sieht wie folgt aus:Prolog findall/3: mehr als eine Tasche
moveFox(+PrevState, -NextState, -PegList, +VisitedStates, -NewVisitedStates)
Es dauert eine Spielzustand und macht eine Bewegung mit einem Fuchs. Der resultierende Zustand wird mit NextState
vereinheitlicht und die tatsächliche Bewegung wird mit PegList
vereinheitlicht. Alles funktioniert wie erwartet.
Ich berechne den Nutzen Punktzahl für alle Züge 'NextState
. Um den Status mit der höchsten Nutzenpunktzahl zu finden, verwende ich findall/3
, um alle Zustände in einer Liste zu erhalten, bevor Sie ihre Nutzenwerte vergleichen.
findall(NextState, moveFox(...), NextStatesList)
durch den maximalen Nutzen Punktzahl zu finden, ich kenne die NextState
(wie auch seine Position in der Liste) mit dem höchsten Nutzen-Score. Es gibt nur ein Problem, das derzeit habe ich geschrieben kein Prädikat zu schließen, die sich bewegen zu NextState
kommen wurde gemacht, z.B .:
getMove(+PrevState, +NextState, -PegList)
Statt ein solches Prädikat zu schreiben, würde ich viel lieber findall/3
oder gleichwertige verwenden. Meine Frage ist, ob es eine Möglichkeit gibt, zwei verschiedene Variablen in zwei verschiedene Listen zu bekommen. Ich bin wie das Denken (wenn es funktioniert hätte):
findall([NextState, PegList], moveFox(...), [NextStatesList, MoveList])
Könnte ich eine solche Funktionalität implementieren, ohne entweder findall/3
zweimal mit laufen (hässlich Overhead) oder dass getMove(+PrevState, +NextState, -PegList)
Prädikat schreiben?
Danke für die Antwort so schnell! Es hat wie ein Zauber funktioniert. –