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 :

Afficher une liste qui ne comporte pas deux éléments identiques


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Afficher une liste qui ne comporte pas deux éléments identiques
    Écrire une fonction stutterfree: ’a list -> ’a list qui prend une liste et qui
    renvoie une liste sans répétition i.e. si deux éléments successifs sont égaux un seul de ces éléments
    est présent dans la nouvelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste. ex stutterfree [1;1;4;2;2;6;6;6;2] = [1;4;2;6;2]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let rec stutterfree a= match a with
    	|[]-> []
    	|i::[]-> []
    	|i::t-> if i== t then i:: else i::(stutterfree t);;
    ce code ne marche pas pk?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Résolution de l'exercice ocaml
    enfin résolu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let rec stutterfree a= match a with
    	|[]-> []
    	|i::[]-> i :: []
    	|i::t::z ->if i == t then (stutterfree (t::z)) else i::(stutterfree (t::z));;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 172
    Points
    172
    Par défaut
    ([i] est équivalent à i :: [])

    Une autre version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    let rec stutterfree a = match a with
      | [] -> []
      | i :: t :: z when i = t -> stutterfree (t :: z)
      | i :: tl -> i :: stutterfree tl
    Attention, n'utilisez jamais l'opérateur ==, il y a des cas dans lesquels vous penserez que deux éléments sont égaux mais == teste l'égalité physique (égalité de pointeurs, notamment) et pas l'égalité structurelle. Utilisez donc = pour le test d'égalité et <> pour le test de différence (pas !=).

    Et une version récursive terminale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let rec stutterfree a = 
      let rec aux acc = function (* function est équivalent à let rec aux acc a = match a with *)
        | [] -> List.rev acc
        | i :: t :: z when i = t -> aux acc (t::z)
        | i :: tl -> aux (i :: acc) tl
      in aux [] a

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par TchoubiTchoub Voir le message
    ([i] est équivalent à i :: [])

    Une autre version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    let rec stutterfree a = match a with
      | [] -> []
      | i :: t :: z when i = t -> stutterfree (t :: z)
      | i :: tl -> i :: stutterfree tl
    Attention, n'utilisez jamais l'opérateur ==, il y a des cas dans lesquels vous penserez que deux éléments sont égaux mais == teste l'égalité physique (égalité de pointeurs, notamment) et pas l'égalité structurelle. Utilisez donc = pour le test d'égalité et <> pour le test de différence (pas !=).

    Et une version récursive terminale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let rec stutterfree a = 
      let rec aux acc = function (* function est équivalent à let rec aux acc a = match a with *)
        | [] -> List.rev acc
        | i :: t :: z when i = t -> aux acc (t::z)
        | i :: tl -> aux (i :: acc) tl
      in aux [] a
    Merci TchoubiTchoub ce gentil

Discussions similaires

  1. [AC-2016] Créer une liste qui ne soit pas basée sur une table
    Par Daejung dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/02/2016, 10h59
  2. [MySQL] Requête afficher une liste d'information comprise entre deux dates
    Par karamaster dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 17/08/2015, 20h20
  3. Réponses: 1
    Dernier message: 10/08/2012, 18h24
  4. Réponses: 6
    Dernier message: 05/01/2011, 14h42
  5. Afficher une liste qui n'existe pas dans la base de données.
    Par Zvetch dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/09/2007, 13h23

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