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

Caml Discussion :

Tri d'une liste en ocaml : Polymorphisme


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Par défaut Tri d'une liste en ocaml : Polymorphisme
    le type liste defini par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       type  'a liste= Vide|Cons of 'a*'a liste;;
    Je souhaite faire un tri par fusion, selection et tri rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let rec insert elt liste  = match liste with 
        |Vide-> [elt]
        |Cons(a,l) -> if elt<a then elt::a::l
                      else a::(insert_ala_pos elt  l );;
    Error: This expression has type 'a liste
           but an expression was expected of type 'a list
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let rec tri_fusion l1 =match l1 with 
            |Vide -> Vide
            |Cons(a,l)-> insert a (tri_fusion l)
            and insert elt l2 = match l2 with 
            |Vide -> Vide
            |Cons(a1,l) ->if elt<a1 then elt::l2 else a1:: insert elt l;;
    Erreur :
    Error: The variant type liste has no constructor ::
    # 
    Je souhaite trier ma liste polymorphe , Merci d'y contribuer ?

  2. #2
    Membre Expert
    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
    Par défaut ça n'est pas un problème de polymorphisme
    D'une part :
    • [] et :: sont des constructeurs pour le type prédéfini 'a list
    • Vide et Cons sont des constructeurs pour le type utilisateur 'a liste

    Ces deux types, bien que similaires, sont considérés comme totalement différents.

    D'autre part tu n'es pas au bout de ta peine car :
    • le premier extrait de code ressemble à une insertion mais ne fait pas de tri par insertion
    • le second extrait de code ne ressemble en rien à un tri fusion

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Par défaut
    Comment faire un tri par insertion et fusion en ocaml ? avec le type liste definie par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     type a' liste= Vide|Cons 'a*'a liste ;;

  4. #4
    Membre Expert
    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
    Par défaut Etapes intermédiaires
    • Pour le tri par insertion il te faut d'abord une fonction d'insertion d'un élément dans une liste triée
    • Pour le tri par fusion il te faut une fonction qui fusionne deux listes triées en une seule liste triée

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Par défaut
    Merci pour ces reponses .
    est il possible que tu me fasse une partie du code ( tri par insertion avec le type polymorphe)?

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 73
    Par défaut
    type 'a liste= Vide|Cons of 'a*'a liste;;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec insert_ e l = match l with 
      |Vide -> Cons(e,Vide)
      |Cons(b,l)-> if e<b then Cons(e,Cons(b,l)) else Cons(b,(insert_ e l));;
    Error: Syntax error

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

Discussions similaires

  1. [SQL] Tri d'une liste!!!
    Par frutix dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/02/2006, 10h00
  2. [Requête] Tri via une liste déroulante
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/01/2006, 18h16
  3. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  4. [TRI] tri d'une list provenant de LabelValueBean
    Par Canou dans le forum Struts 1
    Réponses: 6
    Dernier message: 20/09/2004, 14h55
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

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