+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : juin 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut Liste de carte

    Bonjour,

    je commence à peine en caml mais j'ai un problème.
    J'ai un type couleur, un type figure et un type carte composé du type couleur et figure.
    Ensuite j'ai une liste de carte.
    Et donc mon problème : je ne sais pas comment accéder à la couleur d'une carte qui se trouve dans la liste.

    Ca doit être tout simple mais je n'y arrive pas...

    Merci pour votre aide!

  2. #2
    Membre actif Avatar de Ptival
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 70
    Points : 168
    Points
    168

    Par défaut

    Il va nous falloir les définitions.

    Si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type carte = MkCarte of (couleur * figure)
    alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let MkCarte(c_couleur, _) = c in (* ... *)
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    match c with MkCarte(c_couleur, _) -> (* ... *)
    Si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type carte =
      { couleur : couleur
      ; figure : figure
      }
    alors :

  3. #3
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : juin 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Merci.

    En fait j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type carte =
      { couleur : couleur
      ; figure : figure
      }
    Et je dois écrire une fonction qui prend en paramètre en liste de carte et une couleur et qui renvoie le nombre de cartes de la liste qui sont de cette couleur alors j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let rec nbcoul (l, coul)=
      if l=[ ] then 0
      else if List.hd(l).couleur = coul then 1+nbcoul (List.tl(l), coul) 
      else nbcoul(List.tl(l), coul);;
    et le problème en fait c'est qu'il ne reconnait pas que c'est une liste de carte

  4. #4
    Membre actif Avatar de Ptival
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 70
    Points : 168
    Points
    168

    Par défaut

    Voilà comment on écrirait cela en OCaml légèrement plus idiomatique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let rec nbcoul l coul =
      match l with
      | [] -> 0
      | h::t when h.couleur = coul -> 1 + nbcoul t coul
      | _::t -> nbcoul t coul
    Remarques :
    - pas besoin de mettre les paramètres d'une fonction dans une paire ;
    - pour regarder la forme d'un type de données, on utilise le filtrage par motifs (des motifs qui sont regardés de haut en bas, et le premier qui correspond à la valeur en entrée déclenche l'évaluation du code après son "->") ;
    - pour en plus tester une condition, j'ai ici utilisé une clause "when condition" ;
    - pas besoin de ";;" si tu écris ça dans un fichier.

    On peut même rendre le code plus générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let rec count_sat cond l =
      match l with
      | [] -> 0
      | h::t when cond h -> 1 + count_sat cond t
      | _::t -> count_sat cond t
    
    let nbcoul l coul = count_sat (fun c -> c.couleur = coul) l
    Puis on peut utiliser des fonctions d'ordre supérieur pour éviter d'écrire ça à la main, mais tu verras sûrement ça plus tard.

  5. #5
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : juin 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Impec, je te remercie, tu me dépannes bien.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •