Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/05/2011, 00h05   #1
golden boy
Membre confirmé
 
Avatar de golden boy
 
Homme
Étudiant
Inscription : 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 : 224
Points : 224
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 :
1
2
3
fromList (x:xs) = Cons x (fromList xs)
fromList []        =  Nil
À savoir que Cons est un constructeur de ce type :

Code :
1
2
3
data MyList a = Cons a (MyList a)
                    | Nil
Voilà pour l'instant ma fonction (qui ne marche pas) :

Code :
1
2
3
converse (Cons x Nil) = [x]
converse (Cons x y)   = x:(converse y)
Enfin, le message d'erreur de GHC :
Citation:
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
golden boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 15h17   #2
Chatanga
Membre confirmé
 
Avatar de Chatanga
 
Inscription : décembre 2005
Messages : 172
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 172
Points : 243
Points : 243
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 :
1
2
ghci --version
echo :type converse | ghci
Chatanga est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/05/2011, 16h38   #3
golden boy
Membre confirmé
 
Avatar de golden boy
 
Homme
Étudiant
Inscription : 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 : 224
Points : 224
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é !
golden boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 07h47   #4
SpiceGuid
Rédacteur
 
Avatar de SpiceGuid
 
Homme Damien Guichard
Inscription : juin 2007
Messages : 1 518
Détails du profil
Informations personnelles :
Nom : Homme Damien Guichard
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 1 518
Points : 2 500
Points : 2 500
Si tu regardais avec plus d'attention la déclaration de ton type MyList tu t'apercevrais que ton code devrait être :
Code Haskell :
1
2
fromMyList (Cons x y) = x:(fromMyList y)
fromMyList Nil = []
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
SpiceGuid est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/05/2011, 09h45   #5
golden boy
Membre confirmé
 
Avatar de golden boy
 
Homme
Étudiant
Inscription : 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 : 224
Points : 224
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 !
golden boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h07.


 
 
 
 
Partenaires

Hébergement Web