Je me demandais la bonne et élégante façon de faire une telle chose j'ai essayé p> Quelqu'un sait comment améliorer comment améliorer Ceci? p> Je sais que je peux utiliser ce p> mais en utilisant un cas code> tout en ne faisant pas correspondre à rien, ne semble pas être la bonne façon. p> p>
3 Réponses :
Vous pouvez créer une structure semblable à une table à l'aide de tuples. On m'a connu pour le faire:
C'est une construction intéressante; bien qu'un peu redondant dans ce cas. En outre, vous ne pouvez pas l'utiliser si vous avez des fonctions booléennes arbitraires pour évaluer
Que voulez-vous dire "fonctions booléennes arbitraires"?
Hmm, peut-être que j'avais tort, cela traite de la plupart des situations. Je suppose que le négatif est alors que vous devez écrire une longue liste tuple si vous avez beaucoup de prédicats à évaluer
Idéalement, dans ce cas, vous créeriez un type de données pour représenter les possibilités et utilisez Voir les modèles a> pour simplifier la structure.
Vous pouvez utiliser Multi-Way if-expressions dans GHC 7.6:
fun candy = case color candy of
Blue -> if | isTasty candy -> eat candy
| isSmelly candy -> dump candy
| otherwise -> leave candy
Vous pouvez utiliser des gardes directement dans votre exemple code> expression code>.
fun candy = case color candy of
Blue | isTasty candy -> eat candy
| isSmelly candy -> dump candy
| otherwise -> leave candy
Je suis allé avec votre approche à la fin. Cependant, aimerait connaître la réponse à laquelle avoir une définition de la défense de la fonction où ne fonctionne pas
@ yulan6248: ça marche bien ici. Vous êtes autorisé à avoir un où code> clause sur chaque alternative d'un cas code> code>, et ils sont partagés entre des gardes, comme sur une fonction. Voir Le rapport Haskell pour plus de détails.
Thx, mon mauvais, c'est un problème d'indentation. Je suis une Super-Newbie à Haskell et supporte-moi de demander des questions stupides
Quelle est cette construction appelée? Nous débutants apprennent que les clauses d'une affaire ressemblent à: modèle1 -> résultat1
@ 7Stud: Je ne sais pas s'il y a un nom accepté pour cela. Vous pouvez probablement les appeler «alternatives de cas gardées» ou «gardes dans une expression de cas». Vous pouvez voir Toute la syntaxe de case code> expressions défini dans le rapport de langue Haskell .