Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/10/2012, 21h50   #1
emited
Invité de passage
 
Homme
Inscription : octobre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2012
Messages : 1
Points : 0
Points : 0
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 :
let string_of_date date(jour:date) (mois:date) (annee:date) = jour^mois^annee;;


Code :
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};;
emited est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2012, 19h51   #2
Cacophrene
Membre émérite
 
Avatar de Cacophrene
 
Phrene Caco
Inscription : janvier 2009
Messages : 525
Détails du profil
Informations personnelles :
Nom : Phrene Caco

Informations forums :
Inscription : janvier 2009
Messages : 525
Points : 943
Points : 943
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 :
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
Cacophrene est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h14.


 
 
 
 
Partenaires

Hébergement Web