3
Ich möchte eine Funktion wie schreiben:Wie überprüfe ich, ob eine Liste von Bool-Werten den gleichen Wert enthält?
sameBool :: [Bool] -> Bool
zum Beispiel:
[True, False, True] => False
[True, True] => True
Hier ist meine Lösung:
sameBool :: [Bool] -> Bool
sameBool xs = if head xs == True
then length (filter (== False) xs) == 0
else length (filter (== True) xs) == 0
Mit Wirkung aber nicht elegant. Ich suche eine elegantere Lösung.
Statt '(== 1). Länge "würde ich' null verwenden. drop 1', weil es fauler ist. Das heißt, es muss nicht die ganze Liste durchlaufen, wenn es bereits ein "Wahr" und ein "Falsch" gefunden hat. Beachten Sie, dass diese Änderung auch "True" für "[]" anstelle von "False" zurückgibt, was möglicherweise erwünscht ist oder nicht. – jpath
Wow. Einer der wenigen Fälle, in denen 'head xs' auf der leeren Liste nicht fehlschlägt. Es dauerte ein paar Sekunden, bis ich merkte, dass es wirklich sicher war :-) – chi
@jpath Sein eigener Code triggert Ausnahme auf einer leeren Liste – Wentao