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 :

aide caml types


Sujet :

Caml

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut aide caml types
    Bonjour, je suis actuellement nouveau en programmation j'apprends le language Caml. Je cherche à créer un script capable de vérifier si une date est valide ou non, puis à rendre une chaine de caractères contenant la date. Ceci est mon code. Je reçois un message d'erreur à la compilation; comme quoi "est_bissextile" est une booléenne alors qu'un entier est attendu. Je ne comprends pas comment je pourrais modifier ça pour que ça puisse marcher...

    Et puis j'ai un deuxième problème. Je dois écrire une fonction "string_of_date" qui, à partir d’un élement de type date rend une chaîne de
    caractère contenant la date en utilisant l’opérateur "^".

    Ci-dessous un de mes essais, qui n'est pas concluent...

    Quelqu'un pourrait-il m'aider?
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let string_of_date date(jour:date) (mois:date) (annee:date) = jour^mois^annee;;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    let nb_de_jours est_biss num_mois =  match num_mois with
    							| 1 -> 31
    							| 2 -> if est_biss then 29 else 28
    							| 3 -> 31
    							| 4 -> 30
    							| 5 -> 31
    							| 6 -> 30
    							| 7 -> 31
    							| 8 -> 31
    							| 9 -> 30
    							| 10 -> 31
    							| 11 -> 30
    							| 12 -> 31
    							| _ -> failwith "Numero de mois errone";;
     
    let bissextile a = ( a mod 4 = 0) && ( a mod 100 <> 0 || a mod 400 = 0);;
     
    type date = { jour:int ; mois:int ; annee:int };;
     
    let date_valide j m a = let est_bissextile = bissextile a in
    				let nb_jour_max_mois = nb_de_jours m est_bissextile in
    					if m > 12 || m < 1
    						then failwith "Numero de mois errone"
    						else if j < 1 || j > nb_jour_max_mois              
    							then failwith "Numero de jour errone"
    							else { jour=j; mois=m ; annee= a};;

  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,

    Tu travailles avec Caml light ou OCaml ? Si c'est OCaml, nous sommes nombreux ici à pouvoir t'aider. Sinon, on peut essayer quand même, car ces deux dialectes sont proches, mais il faut savoir qu'on ne l'utilise pas.

    Donc, pour ta fonction nb_de_jours, tu peux essayer de condenser un peu l'écriture, en partant du principe que tu lui donneras toujours une valeur comprise entre 1 et 12 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let nb_de_jours est_biss = function
      | 1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31
      | 2 -> if est_biss then 29 else 28
      | _ -> 30
    Ensuite, pour ton problème de compilation, je pense que cela vient de l'appel let nb_jour_max_mois = nb_de_jours m est_bissextile. En effet, dans ce code, tu as inversé les deux arguments : il faut mettre est_bissextile en premier, et m en second ! Regarde la signature de ta fonction nb_de_jours :

    val nb_de_jours : bool -> int -> int

    Ta fonction string_of_date : si tes trois éléments sont des entiers, il faut faire des conversions. Regarde du côté de int_of_string et du module Printf si tu travailles avec OCaml.

    Tiens-nous au courant.

    Cordialement,
    Cacophrène

Discussions similaires

  1. [Caml] Type image et matrice
    Par marcassin92 dans le forum Caml
    Réponses: 2
    Dernier message: 05/01/2010, 20h47
  2. Aide pour type de noyau de signaux
    Par thuglife dans le forum Signal
    Réponses: 0
    Dernier message: 24/11/2008, 17h36
  3. [aide] Quel type de champs utiliser pour mettre un "+"
    Par lothar59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/03/2007, 15h05
  4. [HTML] aide bouton type checkbox
    Par calitom dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/10/2006, 18h31
  5. Tutoriel "Créer un Fichier d'aide de type .chm"
    Par Claude l'ancien dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2006, 10h46

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