Langage ML

Fermé
hugo - 20 févr. 2008 à 15:34
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 2 juin 2008 à 16:54
Bonjour,

Bonjour,
je viens de debuter la programation dans ce langage et j'aimerais savoir comment est-ce qu'on pourrait sortir une liste de frequence de chaque caractere à partir d'une chaine. par exemple si j'ai la chaine "AABBAABBCCDE" j'aimerais avoir [(A,4),(B,4),(C,2),(D,1),(E,1)].

Merçi
A voir également:

2 réponses

J'ai le meme probleme, j'imagine que tu es un etudiant de l'UVA!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 juin 2008 à 16:54
Avec Caml Light :

let ajouter c v= (* #ajouter : char -> int vect -> int vect = <fun> *)
let n=int_of_char c in
v.(n)<-v.(n)+1;
v;;

let rec calcul s v= (* #calcul : string -> int vect -> int vect = <fun> *)
if s="" then v
else calcul (sub_string s 1 (string_length s -1)) (ajouter s.[0] v);;

let simplifier v= (* #simplifier : int vect -> (char * int) list = <fun> *)
let l=ref [] in
for k=0 to 255 do
if v.(k)>0 then l:= !l@[char_of_int k,v.(k)];
done;
!l;;

let frequence s= (* #frequence : string -> (char * int) list = <fun> *)
simplifier (calcul s (make_vect 256 0));;
0