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 :

D'un type récursif à une liste


Sujet :

Haskell

  1. #1
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut D'un type récursif à une liste
    Bonsoir,

    je suis actuellement dans l'apprentissage du langage Haskell avec le RWH. J'essaye de créer la fonction qui effectue le contraire de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fromList (x:xs) = Cons x (fromList xs)
    fromList []        =  Nil
    À savoir que Cons est un constructeur de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    data MyList a = Cons a (MyList a)
                        | Nil
    Voilà pour l'instant ma fonction (qui ne marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    converse (Cons x Nil) = [x]
    converse (Cons x y)   = x:(converse y)
    Enfin, le message d'erreur de GHC :
    Ambiguous occurrence `converse'
    It could refer to either `Main.converse', defined at add.hs:25:0
    or `Prelude.converse', imported from Prelude
    J'espère que mon raisonnement est tout-de-même assez cohérent (enfin, vous me le direz), je mets en tête chaque 'Cons x' jusqu'au Nil.

    Merci d'avance

  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 : 346
    Points
    346
    Par défaut
    Citation Envoyé par golden boy Voir le message
    Bonsoir,
    Enfin, le message d'erreur de GHC :

    J'espère que mon raisonnement est tout-de-même assez cohérent (enfin, vous me le direz), je mets en tête chaque 'Cons x' jusqu'au Nil.

    Merci d'avance
    C'est bizarre. Ton code devrait fonctionner sans problème car, contrairement à ce qu'indique le compilateur, il n'y a pas de fonction 'converse' dans le Prelude. Renommer ta fonction différemment, par exemple en 'toList', devrait cependant corriger le problème. De plus, ça m'intéresserait de connaître le résultat des deux commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ghci --version
    echo :type converse | ghci

  3. #3
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut
    Bonjour, j'ai donc renommé ma fonction et elle se comporte bien comme j'en avais envie, sans problème. Tu avais vu juste, il y en avait une autre fonction du même nom autre part (j'ai la version 6.12.3 au fait). Je m'excuse de cette erreur vraiment idiote de ma part, d'autant plus que le message de ghci était assez claire (disons que j'étais fatigué quand j'ai codé ça)

    (ça me fait penser à un topic qui parlait de namespace ça d'ailleurs...)


    Et bien merci Chatanga, et encore désolé !

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Si tu regardais avec plus d'attention la déclaration de ton type MyList tu t'apercevrais que ton code devrait être :
    Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fromMyList (Cons x y) = x:(fromMyList y)
    fromMyList Nil = []
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut
    En effet, mais il faut dire que je débute totalement en Haskell et en programmation fonctionnelle, donc les types récursifs et les pattern matching c'est tout nouveau pour moi (déjà que j'avais eu besoin de brouillonner sur un papier pour faire ma première fonction).

    Merci de ta remarque !

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

Discussions similaires

  1. Retrouver mes types Dans une liste
    Par lerieure dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 14/12/2012, 00h13
  2. Combiner différents types dans une liste chaînée en c
    Par roka1988 dans le forum Débuter
    Réponses: 2
    Dernier message: 21/03/2012, 10h51
  3. Nouveau type dans une liste
    Par jc2001 dans le forum SharePoint
    Réponses: 0
    Dernier message: 09/06/2008, 11h27
  4. [J2SE 5.0] Insérer plusieurs type dans une liste. Et les récupérer!
    Par HebusBreizh dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/09/2007, 15h32
  5. comment savoir le type d'une liste déroulante (DropDownList en asp)
    Par shirya dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 16h41

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