Simplifier une expréssion arithmétique
Bonjour,
Voilà j'essaye de faire une fonction "simplifier" qui avec une expression arithmétique contenant des variables, rend une simplification où tous les calculs ( d'entiers donc ) sont effectués
Voici mes déclarations:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| (* Definition d'un arbre binaire *)
type ('a,'b) arbre_bin = Feuille of 'b
| Noeud of ('a,'b) noeud
and ('a,'b) noeud = { gauche : ('a,'b) arbre_bin;
op : 'a;
droite : ('a,'b) arbre_bin };;
(* Operateur arithmétique *)
type operateur = Plus | Moins | Mul | Div;;
(* Type de valeur dans l'expression *)
type primaire = Variable of string | Entier of int;;
(* Expression arithmétique *)
type expr = (operateur, primaire) arbre_bin;;
(* Exemple d'expression *)
let e2 = Noeud({gauche = Feuille (Variable "x"); op=Mul; droite =
Noeud({gauche = Feuille (Variable "y"); op = Moins ; droite =
Noeud({gauche = Feuille (Entier 5); op = Div; droite = Feuille (Entier 4)})
})
});; |
Et voici où je me suis arrêté. Je pense que mon problème est que je n'arrive pas à faire l'addition de 2 feuilles. Enfin bon je bloque
Code:
1 2 3 4 5 6 7 8 9 10
| let evalOp = function
Plus -> (+)
| Moins -> (-)
| Mul -> fun x y -> x * y
| Div -> (/);;
let rec simpl = function e -> match e with
Feuille f -> f
| Noeud n -> match (simpl(n.gauche),simpl(n.droite)) with
(Feuille (Entier i), Feuille (Entier j)) -> Feuille (Entier (evalOp (n.op) i j));; |
Tout aide ou remarque sont le bienvenues ! Et merci à vous ;)