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 :

Fonction simple, mais incapable de trouver l'erreur [Débutant(e)]


Sujet :

Haskell

  1. #1
    Membre averti
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Points : 334
    Points
    334
    Par défaut Fonction simple, mais incapable de trouver l'erreur
    Bonjour à tous,

    J'avais ce matin en midterm une fonction à faire. La fonction écrite compilait bien, mais à l'exécution toujours la même erreur:

    :3:8 Couldn't match type 'Integer' with 'Pile a0'.
    Expected type: Pile(Pile a0)
    Actual type: Pile Integer

    In the first argument of 'sommet', namely 's1'
    In the expression: sommet s1
    In an equation for 'it':it=sommet s1
    Voici le code écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data Pile a= PileVide | Pile {valeurP::a, precedent::(Pile a)} deriving Show --création d'un type pile, qui contient une pile vide ou une valeur et une pile (la valeur précédente dans la structure
     
    --fonction sommet, renvoie une PileVide si on passe une PileVide en paramètre
    -- sinon, renvoie la valeur de la pile en paramètre
    sommet PileVide = PileVide 
    sommet (Pile valeurP precedent) = valeurP
     
    --déclarations de piles
    s4 = Pile {valeurP=4, precedent=PileVide}
    s3 = Pile {valeurP=5, precedent=s4}
    s2 = Pile {valeurP=6, precedent=s3}
    s1 = Pile {valeurP=7, precedent=s2}
    Et pour le test dans la console ghci une fois compilé:

    Ca m'a bloqué durant ~1h, pour sans doute un truc tout bête, mais j'ai beau avoir retourné la fonction dans tous les sens, rien ne fonctionnait.

    Merci par avance.

  2. #2
    Membre averti
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Points : 334
    Points
    334
    Par défaut
    Problème résolu grâce à Sehnsucht.

    Étant donné que je renvoie un coup un Integer et l'autre coup un PileVide, la fonction ne sait pas se définir et soulève une erreur.

    Bref la correction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data Pile a= PileVide | Pile {valeurP::a, precedent::(Pile a)} deriving Show
     
    sommet PileVide = error "empty list"
    sommet (Pile valeurP precedent) = valeurP
     
    s4 = Pile {valeurP=4, precedent=PileVide}
    s3 = Pile {valeurP=5, precedent=s4}
    s2 = Pile {valeurP=6, precedent=s3}
    s1 = Pile {valeurP=7, precedent=s2}

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

Discussions similaires

  1. [MySQL] Problème de bdd simple mais pas évident à trouver
    Par Cynthia. dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2010, 18h38
  2. Trouver une fonction "simple" (reverse engineering)
    Par ®om dans le forum Algorithmes et structures de données
    Réponses: 23
    Dernier message: 28/09/2006, 13h34
  3. Petite fonction toute simple, mais
    Par renaud26 dans le forum Général JavaScript
    Réponses: 46
    Dernier message: 21/07/2006, 14h34
  4. Trouver l'erreur dans une fonction
    Par Seth77 dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 16h38
  5. [SQL] Erreur surement simple mais je ne vois rien ...
    Par kcizth dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2006, 15h00

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