7
votes

Comment faire un si, sinon, si la structure de contrôle est une expression (de manière agréable)

Je me demandais la bonne et élégante façon de faire une telle chose xxx

j'ai essayé xxx

Quelqu'un sait comment améliorer comment améliorer Ceci?

plus

Je sais que je peux utiliser ce xxx

mais en utilisant un cas tout en ne faisant pas correspondre à rien, ne semble pas être la bonne façon.


0 commentaires

3 Réponses :


3
votes

Vous pouvez créer une structure semblable à une table à l'aide de tuples. On m'a connu pour le faire: XXX


4 commentaires

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 pour simplifier la structure.



11
votes

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


0 commentaires

16
votes

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


5 commentaires

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 clause sur chaque alternative d'un cas , 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 expressions défini dans le rapport de langue Haskell .