7
votes

Vérification de la plage dans le cas de Haskell?

Y a-t-il un moyen valide de faire ce qui suit dans HASKELLL:

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    3..99 -> doDefault


0 commentaires

3 Réponses :


19
votes
case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    x | 3 <= x && x < 100 -> doDefault
    _     -> reallyDoDefault

1 commentaires

Me fait souhaiter le prélude défini "Inrange lo hi v = lo <= v && v



2
votes

Je pense que vous pouvez avoir le cas par défaut soit le modèle _, qui correspond à quoi que ce soit.

case n of
  0 -> doThis
  1 -> doThat
  2 -> doAnother
  _ -> doDefault


0 commentaires

11
votes

Utiliser des gardes! ;) xxx


ou xxx


3 commentaires

Personnellement, j'aime le N `elem` [3..99] plus que celui utilisant les inégalités.


La version elem est-elle significativement plus lente? Ou est-ce optimisé?


@ b0fh: yep, elem est juste tout (==) qui est O (n), afaik il est impossible de vérifier l'appartenance à une complexité inférieure à O (n) à moins que la collection que vous vérifie soit triée. en quelque sorte.