Bonsoir, je ne comprends pas quelque chose, et j'espère que vous pourrez m'aiguillez sur la source du problème
Je travaille sur ce type de donnée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 type 'a arbre= |Feuille of 'a |Noeud of ('a arbre * 'a * 'a arbre);;
Jusque là rien de sorcier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 (*Renvoit le premier élément d'un couple*) let nom = fun p -> match p with |(a,_) -> a;; (*Renvoit le second élément d'un couple*) let pouvoir = fun p -> match p with |(_,b) -> b;; (*Concatène les infos d'une personne*) let personnetoString = fun p -> (nom p)^"["^(pouvoir p)^"]";;
voici un exemple avec une racine seule
let p1=Feuille("a","E");;
Ici, E correspond à eau en réalité, donc à l'affichage je voudrais retrouver eau et non E.
Du coup, j'ai fais une autre fonction intermédiaire
Par ailleurs, étant donné que mes arbre sont construit sous la forme de feuille, j'ai une autre fonction qui va récupérer le couple d'une feuille
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 (*récupère la représentation d'un couple pour l'affichage*) let abbreToRepre = fun c -> match c with |(n,p) -> match p with |"E" -> (n,"eau") |"F" -> (n,"feu") |"T" -> (n,"terre") |"A" -> (n,"air") |"X" -> (n,"rien") | _ -> failwith "Type inconnu";;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 (*Récupère le couple d'information correspondant à une feuille*) let feuilleToCouple = fun f -> match f with |Feuille(a,b) -> (a,b) |Noeud(a,i,b) -> failwith "Traite seulement les feuilles";;
Le coeur du problème est ici
Voilà la fonction que j'utilise pour afficher un de mes arbres sous la forme que je veux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 (*Retourne la chaine correspondante à un arbre*) let rec concatArbre = fun a -> match a with |Feuille(n,p) -> personnetoString(abbreToRepre(feuilleToCouple a)) |Noeud(b,i,c) -> personnetoString (abbreToRepre i) ^"("^ concatArbre b ^ "," ^ concatArbre c^")";;
Donc,si je fais
concatArbre p1;;
je m'attends à obtenir a[eau] sauf que, dans mon cas j'obtiens a[E]
Ce qui me parait encore plus absurde, c'est que, si je regarde le résultat de personnetoString(abbreToRepre(feuilleToCouple p1)) j'obtiens pourtant bien a[eau].
Bref, je suis peut être trop dedans ce qui fait que je ne trouve pas la source du problème et je viens donc demander un coup de main =)
Partager