Comment vérifier si une chaîne est plus petite que l'autre, en Haskell?
J'ai deux chaînes étant donné que les arguments d'une Haskell fonction.
s1
est plus petit que s2
si s1
est plus courte que s2
ou si elles ont la même longueur et s1
est lexicographiquement plus petit que s2
.
Comment puis-je mettre en œuvre cette en Haskell?
Vous devez vous connecter pour publier un commentaire.
J'aimerais utiliser quelque chose comme ce qui suit:
Voici un exemple d'exécution, de Câlins:
length
fonction.compare' :: Ord a => [a] -> [a] -> Ordering
ou pas?Un passe-solution:
Essayez ceci:
(Ce qui renvoie LT, EQ, ou GT).
Une version plus courte de la
mappend
version de Tom Lokhorst ci-dessus:Une autre façon, en tirant parti de l'ordre des tuples:
mappend
comparerString
est une instance deOrd
et, par conséquent, vous pouvez utiliser toutes ces méthodes de manière lexicographique de comparaison de chaînes. Comme Andrew a dit, c'est essentiellementcompare
mais aussi les opérateurs de comparaison,(<)
entre autres.Cela fonctionne pour tous les types la mise en œuvre de
Ord
(et il est vraiment juste un brut wrapper pour(<)
), y comprisString
.La normale de comparaison de chaîne ne fonctionne que sur le vocabulaire de la commande, et non pas la longueur des chaînes de caractères.
De sorte que vous devriez écrire votre propre fonction pour également vérifier la longueur:
Ou un peu plus général:
Exemple:
Nous avons été jouer autour avec Monoids à l'université la semaine dernière, et nous avons trouvé cette belle alternative
Ord
exemple:Mais si vous n'avez pas bien comprendre cela, je vous suggère de coller avec la première définition 😉