IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Haskell Discussion :

[Haskell] IO Int


Sujet :

Haskell

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Points : 72
    Points
    72
    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.

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    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 : 803
    Points
    803
    Par défaut
    La fonction read:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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ï

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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??

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main2 >>= writeFile "GEN.txt"
    devrait marcher. Ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do
      content <- main2
      writeFile "GEN.txt" content
    Le premier code est assez logique si tu connais le type de '>>='.

Discussions similaires

  1. [.COM] Réserver de la RAM fct 48h int 21h
    Par bulerias dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 06/12/2010, 14h33
  2. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13
  3. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  4. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07
  5. Les INT en mode protégé
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 05/12/2002, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo