Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/01/2008, 21h23   #1
Arrakis
Membre du Club
 
Inscription : mai 2006
Messages : 94
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2006
Messages : 94
Points : 44
Points : 44
Par défaut [Haskell] IO Int

Bonjour,

Je fait un programme qui demande des valeurs a l'utilisateur et effectue des calcul en utilisant d'autres fonctions.

Je commence à peine a utiliser les entrées-sorties en Haskell, et j'ai besoin d'Int pour les transmettre à mes fonctions.

J'ai vu dans les tutoriels comment demander un IO Char a l'utilisateur, mais pas d'Int (ou de IO Int).
Y-a-t-il un type IO Int ou faut-il transformer les IO Char (et si oui comment ? )

merci.
Arrakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 00h00   #2
GnuVince
Membre chevronné
 
Avatar de GnuVince
 
Développeur informatique
Inscription : avril 2004
Messages : 679
Détails du profil
Informations personnelles :
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2004
Messages : 679
Points : 765
Points : 765
La fonction read:

Code :
1
2
3
4
5
6
7
8
9
Prelude> :t read
read :: (Read a) => String -> a
Prelude> let x = (read "123")::Int
Prelude> x
123
Prelude> :t x
x :: Int
Prelude>
GnuVince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 04h27   #3
Jedai
Expert Confirmé Sénior
 
Avatar de Jedai
 
Étudiant
Inscription : avril 2003
Messages : 6 068
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2003
Messages : 6 068
Points : 8 209
Points : 8 209
Envoyer un message via Yahoo à Jedai
Comme le dit GnuVince, read est la solution pour convertir une chaîne de caractère en ce que tu veux, dans ton cas particulier tu peux également utiliser readLn (= liftM read getLine) si tu demandes une seule valeur par ligne, par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
main = do
  putStrLn "Entrez un entier positif : "
  n <- readLn
  if n < 0
    then do
      putStrLn "J'ai dit POSITIF !"
      main
    else putStrLn ("La factorielle de " ++ show n ++ " est " ++ show (fac n))

fac :: Int -> Int
fac n = product [2..n]
Attention read s'appuie sur le contexte pour savoir le type dans lequel il doit traduire la string, ici l'application de fac à n lui montre qu'on veut un entier, mais parfois il est nécessaire de mettre une signature (surtout dans les exemples artificiels... dans les véritables programmes il y a plus de contexte pour aider généralement).

--
Jedaï
Jedai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2010, 10h47   #4
amirarah
Invité régulier
 
rah asm
Inscription : décembre 2009
Messages : 7
Détails du profil
Informations personnelles :
Nom : rah asm

Informations forums :
Inscription : décembre 2009
Messages : 7
Points : 7
Points : 7
Bonjour à tous

j'ai un petit problème avec les IO en Haskell. j'ai un résultat d'un putStrLn que je veux sauvgarder dans un fichier txt mais j'arrive pas à le faire. voici le code:
Code :
1
2
3
4
5
6
main2 = do r <- readFile "GEN.XML" 
           putStrLn ((show . parse) r)


save = writeFile "GEN.txt" (main2)
il affiche que le deuxième argument de writefile doit être un String, j'ai essayé d'utiliser >>= mais ça ne marche toujours pas.
pourriez vous m'aider pour résoudre ce problème??
amirarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2010, 09h48   #5
gasche
Membre Expert
 
Inscription : avril 2007
Messages : 829
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 829
Points : 1 007
Points : 1 007
Code :
main2 >>= writeFile "GEN.txt"
devrait marcher. Ou alors :
Code :
1
2
3
do
  content <- main2
  writeFile "GEN.txt" content
Le premier code est assez logique si tu connais le type de '>>='.
gasche est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h47.


 
 
 
 
Partenaires

Hébergement Web