Bonjour,
Je viens vers vous pour vous demander de l'aide car j'ai du mal à coder une partie d'un programme.
J'ai réussi à coder ceci :
Qui doit prendre un triplet de string a,b et c, qui sont composé d'entiers séparés d'un espace. Je n'ai besoin que des strings b et c dans la suite du programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 let extract_param (a,b,c) = let ssli s = Str.split (Str.regexp " ") s in let strToInt l = List.map int_of_string l in let rec listeCoupList l = match l with x::y::tl -> (x,y)::(listeCoupList tl) |_ -> failwith "Erreur" in (listeCoupList (strToInt (ssli b)),listeCoupList (strToInt (ssli c)));;
Je créer ensuite une liste de couples.
Bref, je suis maintenant bloqués ici.
Il faut savoir que b et c sont de formes : "123 4 543 2 554 4 123 6 134 2 2314 6". La fonction renvoie donc : [(123,4);(543,2);(554,4);(123,6);(134,2);(2314,6)]
Donc de couple (x,y) et ce que je veux faire dorénavant, c'est ressortir une liste avec la somme des couples quand les y sont égaux.
C'est-à-dire : [(677,4);(677,2);(2448,6)]. Mais je ne sais pas quelles fonctions utilisés pour faire ainsi....
De plus après avoir fait ceci à b et c je voudrais comparer les deux listes et pour tout y données prendre le minimum de x entre les deux listes et faire une somme entre toutes ces valeurs.
Exemple :
On a :
[(677,4);(677,2);(2448,6)] et [(7634,3);(4432,4);(54,6);(134,2);(45436,99)], cela doit me renvoyer : [(677,4);(134,2);(54,6)] et je veux finalement faire : 677+134+54 = 865.
Je voulais donc savoir si vous aviez des recommendations pour résoudre mon problème.
J'ai déjà codé la fonction pour déterminer le minimum entre les deux valeurs :
Mais j'ai du mal à utiliser les listes en programmation fonctionnelle. Je suis plus habitué à du procédurale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part let min x y = if x < y then x else y;;
Merci d'avance !
Cordialement Rigaux.
Partager