+ 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 Valentin Robert
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Nom : Homme Valentin Robert
    Â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 :
    type carte = MkCarte of (couleur * figure)
    alors :
    Code :
    let MkCarte(c_couleur, _) = c in (* ... *)
    ou :
    Code :
    match c with MkCarte(c_couleur, _) -> (* ... *)
    Si :
    Code :
    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 :
    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 :
    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 Valentin Robert
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Nom : Homme Valentin Robert
    Â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 :
    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 :
    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
  •