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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)}) }) });;
Tout aide ou remarque sont le bienvenues ! Et merci à vous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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));;
Partager