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 :

Créer et retourner une variable


Sujet :

Haskell

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Créer et retourner une variable
    Bonjour,

    je suis nouveau en Haskell et j'ai un petit problème concernant la création de variable. En effet, mon école nous interdit d'utiliser le mot clef let pour créer nos variable et je ne vois pas trop comment faire.

    En fait mon problème est de créer dans le corps d'une fonction une variable que je veux retourner par la suite. Pour le moment je crée une variable vide dans la déclaration et la fonction va la retourner remplie.

    Par exemple dans le code suivant, je veux retourner la racine carré i de nb. Ne sachant pas comment créer la variable i dans le corps de la fonction,

    j'appelle mySqr avec le bon nombre nb et la racine carrée i vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mySqr :: Int -> Int -> Int
    mySqr nb i
     
        | i * i == nb = i
     
        | otherwise = mySqr nb (i + 1)
    appel : mySqr 25 0.

    Ça fonctionne ... Cependant j'aimerais dépasser ce stade.

    Je vous remercie par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Bonjour,

    Je ne sais pas si ça répond à ta question, mais voici deux exemples où une fonction retourne une variable result :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    main = putStrLn $ show $ perimeterOfTriangle (20, 10) (23, 10) (23, 14)
     
    perimeterOfTriangle (xA, yA) (xB, yB) (xC, yC) =
        let ab = sqrt ((xB - xA) ** 2 + (yB - yA) ** 2)
            bc = sqrt ((xC - xB) ** 2 + (yC - yB) ** 2)
            ac = sqrt ((xC - xA) ** 2 + (yC - yA) ** 2)
            result = ab + bc + ac
        in result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    main = putStrLn $ show $ perimeterOfTriangle (20, 10) (23, 10) (23, 14)
     
    perimeterOfTriangle (xA, yA) (xB, yB) (xC, yC) = result where
        result = ab + bc + ac
        ab = sqrt ((xB - xA) ** 2 + (yB - yA) ** 2)
        bc = sqrt ((xC - xB) ** 2 + (yC - yB) ** 2)
        ac = sqrt ((xC - xA) ** 2 + (yC - yA) ** 2)
    Si on n'a le droit ni à let, ni à where, alors on peut simuler des variables locales en les transformant en paramètres ou en retour de sous-fonction(s) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    main = putStrLn $ show $ perimeterOfTriangle (20, 10) (23, 10) (23, 14)
     
    perimeterOfTriangle (xA, yA) (xB, yB) (xC, yC) =
        myAdd (sqrt ((xB - xA) ** 2 + (yB - yA) ** 2))
              (sqrt ((xC - xB) ** 2 + (yC - yB) ** 2))
              (sqrt ((xC - xA) ** 2 + (yC - yA) ** 2))
     
    myAdd ab bc ac = ab + bc + ac
    Pour revenir à ton algorithme où tu recherches une racine carrée entière en parcourant tous les entiers naturels à partir de 0 jusqu'à trouver la racine, je n'arrive pas à savoir sur quel aspect tu veux "dépasser" le "stade" de ton code actuel.

    Une version du code qui utilise des fonctionnalités plus avancées de Haskell pourrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import Data.List(find)
    import Data.Maybe(fromJust)
     
    main = putStrLn $ show $ mySqrt 25
     
    mySqrt :: Int -> Int
    mySqrt nb = fromJust $ find (\x -> x * x == nb) [0..]
    Ici, [0..] est une liste infinie qui représente tous les entiers naturels à partir de 0. Le code ci-dessus cherche dans cette liste le premier élément qui respecte le critère défini par la fonction \x -> x * x == nb. Mais il ne semble pas que ça réponde à ta question.

    Remarque : attention, dans le code de ma fonction mySqrt, comme dans ta fonction mySqr, si on lui donne en entrée un entier qui n'a pas de racine carrée entière, alors on a une boucle infinie.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour ta réponse, je visualise mieux à présent !

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

Discussions similaires

  1. [PHP 5.0] Creer une fonction qui retourne une variable dans le script
    Par keaton7 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2009, 14h09
  2. [POO] Retourner une variables contenu dans une autre méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 6
    Dernier message: 15/10/2007, 16h29
  3. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  4. [MySQL] Retourner une variable
    Par ctrl+z dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/10/2006, 12h27
  5. Réponses: 6
    Dernier message: 30/08/2006, 18h05

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