Ich versuche, eine Funktion zu schreiben, die feststellen wird, ob ein Element in einer Liste vorhanden ist, die beide vom Benutzer bereitgestellt werden. Ich denke, eine rekursive Lösung ist am besten. Das habe ich:Ermitteln, ob Wert ein Element einer Liste in Haskell ist
isElement :: a -> [b] -> Bool
isElement a [] = False
isElement a (x:xs) = if a == x then True
else isElement a xs
Aber es kann nicht kompilieren. Der Fehler lautet "Der erwartete Typ -a konnte dem tatsächlichen Typ -b 'nicht entsprechen". Ich weiß nicht, was das bedeutet oder wie man das Problem beheben kann.
Ihre Typ-Signatur ist falsch. '==' erfordert, dass seine Operanden den gleichen Typ haben, aber Sie haben 'a :: a' und' x :: b'. – melpomene
Und nicht irgendein Typ; 'a' muss eine Instanz der Klasse' Eq' sein: 'isElement :: Eq a => a -> [a] -> Bool'. – chepner
Sie sollten immer misstrauisch sein, wenn Sie in der Nähe von 'if' mit' True' oder 'False' arbeiten. Normalerweise bedeutet das, dass die Logik direkter ausgedrückt werden kann, ohne ein "if". In diesem Fall ist das wahr. Sie könnten den Körper der zweiten Gleichung als '(a == x) || schreiben isElement a xs'. – Carl