Ich versuche, eine gültige Bewegung zu bestimmen. Ein Zug muss zwei Bedingungen erfüllen, um einen gültigen Zug zu ermöglichen. Die erste Bedingung ist sicherzustellen, dass sich kein bereits vorhandenes Stück in der Position befindet, in die ich mich bewegen möchte. Die zweite Bedingung besteht darin, sicherzustellen, dass ich einen Punkt erziele, wenn ich diesen Zug mache.Mehrere Bedingungen bei der Verwendung von Wachen in Haskell
Ich habe den Code für die erste Bedingung abgeschlossen, aber ich weiß nicht, wie man das mit der zweiten Bedingung weiter verfolgt. Vielleicht ist der Grund, warum es schwierig ist, weil es einen Bool zurückgibt, der auf Wahr oder Falsch gesetzt werden muss, wenn eine der anderen Bedingungen erfüllt ist. Zum Beispiel
valid :: Piece -> Pieces -> Bool
valid p [] = True
valid p (x:xs) | getPos(p) == getPos(x) = False
| otherwise = valid p xs
So wie Sie sehen können, habe ich den Code für die erste Bedingung gemacht, jetzt, wie ich in der zweiten Bedingung hinzu?
So etwas wie
valid :: Piece -> Pieces -> Bool
valid p [] = True
valid p (x:xs) | getPos(p) == getPos(x) = False
| otherwise = valid p xs
&& ...
Aber dann wieder, wird diese Funktion nicht mehr, wenn die erste Bedingung entweder ausfällt oder übergibt. Was ist die Arbeit dafür?
EDIT: Erklärungen
data Piece = Piece Position Player
type Pieces = [Piece]
EDIT: getPos
getPos ist eine Funktion, die die Position eines Stückes