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 :

Opérations conditionnelles avec IO()


Sujet :

Haskell

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut Opérations conditionnelles avec IO()
    Bonjour,

    J’aimerais qu’une opération sous IO () ne soit exécutée que sous une condition donnée.
    ( l’opération est la création d’un bouton avec fltkhs et la condition est qu’une variable ait une certaine valeur ).

    Une question équivalente a été posée ici : https://mail.haskell.org/pipermail/h...ne/093301.html mais je ne comprend pas la réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    main :: IO ()
    main = do
     window <- windowNew
               (Size (Width 175) (Height 120))
               Nothing
               Nothing
     begin window
     b' <- buttonNew
            (Rectangle (Position (X 15) (Y 30)) (Size (Width 95) (Height 30)))
            (Just "A")
     setLabelsize b' (FontSize 10)
     setCallback b' buttonCb
     
           ----------------------------    ceci qui se trouve entre les droites pointillée ne devrait s'exécuter que sous une condition ( comme x==1 )
     
     c' <- buttonNew
            (Rectangle (Position (X 50) (Y 77)) (Size (Width 95) (Height 30)))
            (Just "C")
     setLabelsize c' (FontSize 10)
     setCallback c' buttonCb
     
          ------------------------------
     
     end window
     showWidget window
     _ <- FL.run
     return ()
    merci d'avance,
    bb.

  2. #2
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2005
    Messages : 211
    Points : 338
    Points
    338
    Par défaut
    Tout simplement ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    main :: IO ()
    main = do
        ...
        setCallback b' buttonCb
     
        let x = 1
        when (x == 1) $ do
            c' <- buttonNew
                    (Rectangle (Position (X 50) (Y 77)) (Size (Width 95) (Height 30)))
                    (Just "C")
            setLabelsize c' (FontSize 10)
            setCallback c' buttonCb
     
        end window
        ...
    De manière peut-être plus compréhensible vis à vis de la manipulation de monades :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    main = do
        ...
        let x = 1
        let conditionalAction = do
                c' <- buttonNew
                        (Rectangle (Position (X 50) (Y 77)) (Size (Width 95) (Height 30)))
                        (Just "C")
                setLabelsize c' (FontSize 10)
                setCallback c' buttonCb
                return () -- Utile ou non selon le type de 'setCallback'.
     
        when (x == 1) conditionalAction
        ...
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    main = do
        ...
        -- le 'then' et le 'else' doivent avoir le même type (pas nécessairement 'IO ()').
        if x == 1 then conditionalAction else return ()
        ...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup !

    Cela repose donc sur when.

    J’avais trouvé une solution proche de la 3em manière, mais non valide parce-que ici, justement le else n’a pas
    le même type ( puisqu’il correspond à une non-action ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déploiement conditionnel avec inno setup
    Par Baran dans le forum Installation, Déploiement et Sécurité
    Réponses: 1
    Dernier message: 12/11/2006, 19h47
  2. [HQL]select conditionnel avec set
    Par Glum147 dans le forum Hibernate
    Réponses: 4
    Dernier message: 10/11/2006, 15h01
  3. Faire des opérations réelles avec bash ?
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 01/09/2006, 15h59
  4. Commande conditionnelle avec cmd.exe
    Par lastrecrue dans le forum Windows XP
    Réponses: 1
    Dernier message: 31/08/2006, 16h27
  5. [DBMS_STATS][9i]Réaliser la même opération qu'avec ANALYZE.
    Par Le nain Attila dans le forum Oracle
    Réponses: 7
    Dernier message: 09/06/2006, 18h35

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