Sml

Fermé
mousekey - 12 mars 2006 à 23:08
 didre - 1 mars 2008 à 07:19
Bonjour,
je dois faire une ou des fonctions qui me permettre à partir d'une liste de int me donner une string. Ca marche pour le premier caractère mais pour le reste j'ai un problème. Je code mon programme selon l'idée de Huffman.


voici mon code pour ce que j'ai fait...

val arbre2 = creerArbre str2;

val arbre3 = creerArbre str3;

fun compterInt([]:int list) = 0 |
compterInt(_::l) = 1 + compterInt(l);

val k = [0,0,1];
val b = #"*";
fun VerifierNoeudValide([]:int list, []:arbreBinaire list)= b |
VerifierNoeudValide(l:int list, []:arbreBinaire list)= raise Codage0 |
VerifierNoeudValide([]:int list, noeud(_,c,vide,vide)::a:arbreBinaire list)= c |
VerifierNoeudValide(v::l, noeud(e,c,g,d)::a)=
if ( g <> vide ) then VerifierNoeudValide(l, [g])
else VerifierNoeudValide(l,[d])
| VerifierNoeudValide(l, noeud(e,c,g,d)::a:arbreBinaire list) =
if ( compterInt(e::l) = 1 ) then c
else VerifierNoeudValide(l,a);

val car = []:int list ;

fun decodage([]:int list, a:arbreBinaire) = b |
decodage(e::l, a) =
let val temp = VerifierNoeudValide(e::car, [a])
in
if ( temp <> #"*" ) then decodage(l, a)
else b
end;

val s = "";
fun Z(c:char, p:string) =
if ( c <> #"*" ) then implode(c::explode(p))
else raise Codage0;

fun
F(l:int list, a:arbreBinaire)= s |
F(e::l:int list, a:arbreBinaire)=
let val (t) = VerifierNoeudValide(e::car,[a])
in
if ( t <> #"*" ) then implode(t::explode(s))
else Codage0
end ;

(*
(But: Construit l'arbre de Huffman correspondant a la chaine en argument
(Paramètre : entrée : mot: chaine de charactère "EAABB"
( sortie : l'arbre de Huffman noeud(5,?,noeud(2,B,vide,vide),noeud(3,?,noeud(1,E,vide,vide),noeud(2,A,vide,vide)))
*)

fun creerArbre0([noeud( i1,c1,g1,d1 )]:arbreBinaire list) = noeud( i1,c1,g1,d1 )
| creerArbre0([]:arbreBinaire list)=vide
| creerArbre0(noeud ( i1,c1,g1,d1 )::noeud ( i2,c2,g2,d2 )::l )=
creerArbre0( inserer( noeud( i1+i2,#"?",noeud( i2,c2,g2,d2 ),noeud( i1,c1,g1,d1 ) ),l));

fun creerArbre(mot:string) =
let val l1=listeNoeuds(mot)
val l2=triNoeuds(l1) in
creerArbre0(l2)
end;



merci
mousekey

1 réponse

bonjour
dans ton code on ne voit pas l'implementation de la fonction triNoeuds ce qui veut dire que la fonction creerArbre ne va pas s'executé.
0