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 :

Liste de carte


Sujet :

Caml

  1. #1
    Futur Membre du Club
    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 : 5
    Points
    5
    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 : 35
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 70
    Points : 276
    Points
    276
    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
    Futur Membre du Club
    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 : 5
    Points
    5
    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 : 35
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 70
    Points : 276
    Points
    276
    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
    Futur Membre du Club
    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 : 5
    Points
    5
    Par défaut
    Impec, je te remercie, tu me dépannes bien.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/02/2010, 18h30
  2. Liste des cartes graphiques nVidia
    Par {F-I} dans le forum Composants
    Réponses: 4
    Dernier message: 07/11/2008, 05h25
  3. Je ne vois pas ma carte réseau dans la liste des matériels
    Par cadabricadabra dans le forum Administration
    Réponses: 6
    Dernier message: 18/08/2008, 12h52
  4. Je ne vois pas la carte réseau dans la liste de matériel
    Par cadabricadabra dans le forum Réseau
    Réponses: 4
    Dernier message: 13/08/2008, 17h09
  5. Liste des cartes sons installées
    Par RebProTizer dans le forum DirectX
    Réponses: 5
    Dernier message: 13/06/2005, 17h12

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