Langage ML

hugo -  
KX Messages postés 19031 Statut Modérateur -
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
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  1. soso
     
    J'ai le meme probleme, j'imagine que tu es un etudiant de l'UVA!
    0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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