Wie andere, auf die beste Art und Weise angegeben haben, zu überprüfen, ob eine Liste leer ist (und nicht mehr) ist
null :: Foldable f => f a -> Bool
der verwenden Bei Typ
null :: [a] -> Bool
verwendet werden Wenn Sie überprüfen möchten, ob eine Liste leer ist, weil Sie wan t an seinen Elementen suchen sonst, Sie sollten in der Regel Muster werden unter Verwendung passender statt:
f [] = something
f (x : xs) = something using x and/or xs
Wenn Sie die Längen von zwei Listen (und nicht mehr) vergleichen wollen, ist der beste Weg ist in der Regel so etwas wie
compareLength :: [a] -> [b] -> Ordering
compareLength [] [] = EQ
compareLength [] (_ : _) = LT
compareLength (_ : _) [] = GT
compareLength (_ : xs) (_ : ys) =
compareLength xs ys
der beste Weg, um zu überprüfen, wie die Länge einer Liste auf eine bestimmte Anzahl vergleicht ist
compareToLength :: Foldable f
=> f a -> Int -> Ordering
compareToLength = foldr go (compare 0) where
go _ r n | n <= 0 = GT
| otherwise = r $! n - 1
1 ist linear in der Länge der Liste (offensichtlich), während 2 konstante Zeit ist. Aber 2 hat den Nachteil, eine'Eq'-Einschränkung zu verlangen, wenn Sie sie nicht wirklich brauchen. Suchen Sie nach einer leeren Liste mit 'null' oder einfach nach Mustererkennung. – user2407038
das Problem ist Mustererkennung funktioniert nicht, wenn Sie die Gleichheit mit anderen vordefinierten Listen vergleichen wollen –
Auch danke und das macht eine Menge Sinn. Könnten Sie mehr über null herausfinden? –