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 : 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)})
			 })
	       });;
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
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