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 :

Exrtraire les chaines croissantes d'une listes d'entiers


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Exrtraire les chaines croissantes d'une listes d'entiers
    Bonjour.

    Je doit faire une fonction qui extrait les chaines croissantes d'une liste d'entiers (a partir d'une liste d'entiers on doit retourner une liste de listes constituée des entiers croissants de la premiere liste) :

    Par exemple si on lui donne en entré la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [1;2;3;4;2;3;4;6;7;1;8;9];;
    Elle devra retourner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [ [1;2;3;4] ; [2;3;4;6;7] ; [1;8;9] ];;
    J'ai déjà écrit une fonction mais elle ne fait pas correctement ce que je veu car elle ne peut renvoyer que des sous liste de maximum deux entiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let rec chaines_croissantes l=
    match l with
      |[]->[[]]
      |[x]->[[x]]
      |x::y::s->if(x>y) then ([x]::chaines_croissantes (y::s))
        else ([x;y]::chaines_croissantes s);;
    Le problème est apparemment ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else ([x;y]::chaines_croissantes s);;
    Mais je ne voit pas comment faire pour résoudre le problème merci d'éclairer ma lanterne.

    PS: Sinon j'avais réussi à modifier cette fonction pour isoler la première chaine croissante de la liste donc logiquement il ne me reste plus qu'a faire une fonction récursive qui va rassembler tout cela MAIS je ne sait pas comment former une liste de liste avec des listes: étant donné qu'on ne peut pas faire sa :

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Pour faire une liste de liste, c'est soit :
    soit :
    (le [] est du type int list list)

    J'ai une petite solution imparfaite en Haskell, ça pourrait t'inspirer éventuellement :
    Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    growings :: (Ord a) => [a] -> [[a]]
    growings [] = []
    growings [x] = [[x]]
    growings (x: xs@(y:_))
        | x > y = [x] : growings xs
        | otherwise = let (ys : rest) = growings xs
                      in (x:ys) : rest

    --
    Jedaï

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour ton aide Jedaï
    Grace a toi j'ai apprit comment faire des liste de liste et ton exemple en Haskell, bien que je n'en ai jamais fait (je ne connaissait même pas ce langage ) m'a bien aidé.

Discussions similaires

  1. Extraire Les Differentes Valeurs D'une Liste
    Par domdenoi dans le forum Excel
    Réponses: 4
    Dernier message: 11/04/2007, 11h11
  2. Réponses: 12
    Dernier message: 05/10/2006, 15h00
  3. Réponses: 4
    Dernier message: 01/10/2006, 15h37
  4. Réponses: 7
    Dernier message: 24/04/2006, 15h48
  5. Réponses: 1
    Dernier message: 24/04/2006, 01h55

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