Aidez moi sur Caml

joe24 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
j'ai la structure suivante sur caml:
# type nom=string and prenom=string and note=float and mayenne=float;;
# type etudiant=(nom*prenom)*(note list);;
# type resultat=etudiant list;;
1°:la fonction moyenne,son profil est:note ist->float

(* La fonction d'addition de 2 reels*)
# let add x y = x +. y;;

(*La some des elements d'une liste*)
# let rec list_sum l = match l with
[]->0.
| x:: xs ->add x (list_sum xs);;

(*La longueur d'une liste*)
# let rec lenght l =match l with
[]->0.
| x::reste ->1.+.lenght reste;;

(*La moyenne des elements d'une liste*)
# let moyenne l=list_sum l /. lenght l;;

(*La moyenne d'un etudiant*)celle ci ne marche pas.
# let etudiant_moyenne l=match l with
(("",""),[])->0.
| (("",""),m)->moyenne m;;

(*Liste des moyenes des etudiants*) son profil resultat->((nom*prenom)*moyenne)list
#let etudiant_moy l=match l with
[]->0.
| [("",""),[]]->0.
| x::reste->[etudiant_moyenne x;etudiant_moy reste];; elle ne marche pas aussi

(*Liste des etudiants admis*)son profil:((nom*prenom)moyene)list>(nom*prenom)list
#let etudiants_admis l=match l with
[]->("","")
|[("",""),m] when moyenne m>=10. ->("","");;elle ne marche as aussi
(*Liste des etudiants ajournés*)

Aidez moi a rectifier les erreurs SVP.
Configuration: Windows XP
Firefox 2.0

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Malheureusement mes connaissances en Caml se limitent à Caml Light...
    Cependant avec Caml Light je peux faire ces quelques fonctions qui devraient convenir :

    (* etudiant_moyenne : ('a * 'b) * float list -> float = <fun> *)
    let etudiant_moyenne e=
    let ((n,p),l)=e in moyenne l;;

    (* etudiant_moy : (('a * 'b) * float list) list -> float list = <fun> *)
    let rec etudiant_moy l=
    match l with
    []->[]
    |e::reste->(etudiant_moyenne e)::(etudiant_moy reste);;

    (* etudiants_admis : (('a * 'b) * float list) list -> ('a * 'b) list = <fun> *)
    let rec etudiants_admis l=match l with
    e::reste when (etudiant_moyenne e)>=10. -> let ((n,p),note)=e in (n,p)::(etudiants_admis reste)
    |_->[];;

    Je ne les ai pas vérifiées mais elles compilent, il faudra peut-être faire quelques arrangements pour passer à OCaml....
    0

Discussions similaires