comment pourrais-je retourner plusieurs valeurs à partir d'une fonction en haskell?
Hifriends
est-il possible que cette fonction renvoie plusieurs valeurs(e.g string et boolean)?
si oui, alors j'ai un appel de fonction concat qui retourne un Booléen et un string, mais je ne sais pas comment appeler les fonctions parce que je veux les stocker. J'ai écrit un très bigcode. Je ne suis donc pas en mesure de le poster.enter code here
concat::(String->Int)->(IO Bool->IO String)
concat line i=do
return True line
Pouvez-vous m'aider à écrire la signature de la fonction, et comment appeler les fonctions?
juste j'ai besoin d'un prototype
Grâce
OriginalL'auteur rahul | 2014-07-30
Vous devez vous connecter pour publier un commentaire.
Au moment de retourner plusieurs valeurs, vous devrez retourner un type de données algébrique. Beaucoup peut être dit à propos de cela, je vais vous donner quelques suggestions.
Si votre
Bool
etString
sont en quelque sorte plus liés et ils seront souvent ensemble dans votre code, définir un nouveau type de données algébrique:Vous pouvez définir également avec les fonctions d'accesseur, qui documentent les données ainsi:
et vous pouvez définir une fonction électronique. g. pour l'initialisation de la question:
ou (pour l'amélioration de la documentation):
ensuite, vous pouvez travailler avec vos données en utilisant les données constructeur:
ou en utilisant les fonctions d'accesseur (beaucoup de combinaisons des deux approches sont possibles):
exemple de l'appel de fonctions:
Si vous ne voulez pas définir un nouveau type de données utiliser un prédéfini d'un tuple. Il existe de nombreuses fonctions définies dans la norme des bibliothèques, qui rendent votre travail avec les tuples plus facile. Cependant, n'utilisez pas les tuples partout - plus code pourrait devenir un gâchis (manque de documentation - il n'est pas clair quelles sont les données que le tuple représente), les erreurs de type n'est pas si facile à suivre en raison de polymorphisme.
Un exemple d'un type de pratique de l'utilisation de n-uplets:
Trop dit à propos de cette question simple, mais puisque j'ai parlé de la bibliothèque standard de soutien comme le principal avantage de tuples, je vais donner le dernier exemple qui utilise
uncurry
fonction de Prélude:OriginalL'auteur pallly
Oui, vous pouvez retourner plusieurs valeurs avec une haskell construire appelé un n-uplet.
Voici un exemple simple
Vous pouvez alors accéder à la première partie de la n-uplet avec
fst
et la seconde avecsnd
. Cependant, il est préférable de mise en correspondance du modèleou
Maintenant, imaginons que votre fonction ne certains IO et obtient un
String
et unBool
, votre fonction serait vaguement commeSi vous travaillez dans une monade et avec l'aide d'un
do
bloc, vous pouvez également en correspondance du modèle à l'aide d'une jolie forme.Avis que cette doit être en bloc. Vous ne pouvez utiliser qu'un faire bloc si vous êtes de retour d'une valeur du type
m a
oùm
est une monade, commeIO
.Écrire de quelle manière?
je l'ai,j<-addAndSub 2 3
J'ai mis à jour. Ne pas que vous ne pouvez pas utiliser ne bloque partout, seulement lorsque vous faites quelque chose comme
IO
. Pourquoi vous n'aimez pas lecase
forme?La deuxième forme que j'ai posté est vraiment juste une affaire avec du sucre, de sorte que vous pouvez utiliser.
OriginalL'auteur jozefg