je commence à désespérer donc je viens quémander un petit coup de main là dessus ^^
En effet, je tombe sur une exception de type match failure
Exception: Match_failure ("", 199, 1).
lorsque j'appelle cette fonction
- Code: Tout sélectionner
let rec concatArbre2 = fun a ->
match a with
|Feuille(n,p,r) -> personnetoString2(feuilleToTriplet a)
|Noeud(b,i,c) -> personnetoString2 i ^"("^ concatArbre2 b ^ "," ^ concatArbre2 c^")";;
L'ensemble de mes fonction travaille avec ce type de donnée
- Code: Tout sélectionner
type 'a arbre=
Feuille of 'a
|Noeud of ('a arbre * 'a * 'a arbre);;
La fonction semble bug dans le plus simple des cas. Prenons une simple feuille
- Code: Tout sélectionner
let p2=Feuille("b","X","+");;
concatArbre2 p2 renverra l'exception match failure.
Je pense que le problème vient de abbreToRepre
- Code: Tout sélectionner
let abbreToRepre2 = fun p -> fun r ->
match r with
|"?" -> (match p with
|"E" -> "eau+glace?"
|"F" -> "feu+lave?"
|"T" -> "terre+bois?"
|"A" -> "air+foudre?"
|"X" -> "aucun"
|"?" -> "??"
|_ -> failwith "pouvoir impossible")
|"=" -> (match p with
|"E" -> "eau"
|"F" -> "feu"
|"T" -> "terre"
|"A" -> "air"
|"X" -> "aucun"
|"?" -> "?"
|_ -> failwith "pouvoir impossible")
|"+" -> (match p with
|"E" -> "eau+glace"
|"F" -> "feu+lave"
|"T" -> "terre+bois"
|"A" -> "air+foudre"
|"X" -> "aucun"
|"?" -> "?+"
|_ -> failwith "pouvoir impossible")
| _ -> failwith "rang inconnu";;
Sauf que je ne vois vraiment pas où j'oublie un cas de match sachant que j'ai des failwith automatique sur chaque match...
En ce qui concerne les autres fonction de concatArbre2 ;
feuilleToTriplet prend une Feuille et renvoie son triplet. En gros Feuille(a,b,c) -> (a,b,c)
personneToString2 prend un triplet et renvoie son les infos sous un certains format qui appelle abbreToRepre
- Code: Tout sélectionner
let personnetoString2 = fun p ->
(nom2 p)^"["^(abbreToRepre2 (pouvoir2 p) (rang p))^"]";;
nom pouvoir et rang sont des fonction qui renvoient respectivement le premier/second/troisième élément d'un triplet.
Dès l'appel de personneToString sur un simple triplet on a l'exception du match failure.
En espérant que vous y verrez plus clair que moi x)