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 :

problème sur les multi-ensembles et sur la résolution de contrepets.


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut problème sur les multi-ensembles et sur la résolution de contrepets.
    Bonjour à tous

    Désolé de vous déranger durant cette période de fête mais je me heurte a certains problèmes pour mon projet d'informatique... Voilà j'essaye de créer des fonctions afin de faciliter les opérations dans mes multi-ensemble. Or je rencontre un certain problème avec la fonction m_intersection qui utillise les fonctions m_appartient et m_ajoute... Je pense que mon problème vient de la définition de mon multi-ensemble vide, mais je ne vois pas comment le définir autrement...

    1. type 'e multi = (int*'e) list;;
    2. let multivide = [];;
    3. let rec m_appartient (a:'e)(ens:'e multi):bool=
    4. match ens with
    5. |[]-> false
    6. |t::q -> let (x,y)=t in
    7. if a=y
    8. then true
    9. else m_appartient (a)(q);;
    10. let rec m_ajoute (ele:'e)(ens:'e multi):'e multi=
    11. match ens with
    12. |[]->[1,ele]
    13. |t::q-> let x,y=t in
    14. if ele=y
    15. then ((x+1),ele)::q
    16. else t::m_ajoute (ele) (q);;
    17. let rec m_intersection (ens1:'e multi)(ens2:'e multi):'e multi =
    18. match ens1 with
    19. |[]->[]
    20. |t::q-> let x,y=t in
    21. if m_appartient (y)(ens2)
    22. then (m_ajoute(y)(multivide)) :: (m_intersection(m_supprime(y)(ens1))(ens2))
    23. else m_intersection (q)(ens2) ;;


    Je précise juste que mes fonctions m_ajoute et m_appartient fonctionnent

    Ensuite, mon deuxième problème est quelque peu d'un autre genre. Le but à la fin est de vérifier si mes phrases sont des contrepéteries. Pour cela, je cherche donc à décomposer mon mot de la manière suivante :

    1. type mot = char list;;
    2. type 'e ensemble= 'e list;;
    3. type decomposition=(mot*char*mot) ensemble;;
    4. let rec decompose (a:mot):decomposition=
    5. match a with
    6. |[]->[]
    7. |t1::t2::q->(t1,t2,q) :: ([t1]@decompose(t2::q));;


    Qui doit donc me donner une liste de décomposition de mon mot, pour exemple le mot salut donnerait : ["",'s',"alut";"s",'a',"lut";"sa",'l',"ut";"sal",'u',"t";"salu",'t',""]. Je me casse la tête dessus cette fonction depuis environ 3h et je n'arrive pas à voir ou concaténer et ou insérer mes éléments. Peut-être à cause du manque de sommeil et de l'heure tardive...

    Merci d'avance à vous et je vous souhaite de passer de bonnes fêtes

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Une remarque de forme tout d'abord : essaie d'utiliser les balises CODE, elles améliorent la lisibilité du code source et c'est vraiment mieux pour ceux qui lisent tes messages (moi par exemple). Quelques remarques sur ton code :

    • Ta fonction m_appartient est facile à écrire avec List.exists.
    • Les annotations de type ne sont pas très utiles. Tu pourras les indiquer dans le fichier d'interface de ton module.
    • (Un détail) Tu as des parenthèses inutiles dans tes codes.

    Je n'ai pas testé le code ci-dessous, essaie de voir si ça correspond à ce que tu veux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    let multivide = []
    let m_appartient x t = List.exists (fun (_, y) -> x = y) t
    
    let rec m_ajoute x = function
      | [] -> [1, x]
      | (n, y) as c :: t -> if x = y then (n + 1, y) :: t
        else c :: m_ajoute x t
    
    let m_intersection e1 =
      List.fold_left (fun ei (_, y) ->
        if m_appartient y e1 then m_ajoute y ei else ei
      ) multivide
    Concernant ton second problème, regarde ceci (attention non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let decompose s =
      let n = String.length s and get = String.sub s in
      let rec loop i =
        if i = n then []
        else (get 0 i, s.[i], get (i + 1) (n - i - 1)) :: loop (i + 1)
      in loop 0
    Cordialement,
    Cacophrène

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. Question de débutant sur les Multi Layer Perceptrons ?
    Par faroukus dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 26/08/2008, 13h43
  3. Réponses: 12
    Dernier message: 31/03/2006, 20h02
  4. CSS : Bordure sur les liens mais pas sur les images ?
    Par monstroplante dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 04/02/2006, 14h18
  5. [CSS] border-collapse sur les TR mais pas sur les TD.
    Par hpfx dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 03/04/2005, 16h16

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