Bonjour tout le monde, je travaille sur un évaluateur de formule postfixe, voila le code sur lequel je suis parti :

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
24
25
26
27
28
29
30
31
32
 
type unaire == float -> float;;
type binaire == float -> float -> float;;
 
type lexem =
|nombre of float
|opUnaire of unaire * lexem
|opBinaire of lexem * binaire * lexem;;
 
type FP =
|formule of lexem list;; 
 
let empile lex refListe = refListe := lex::(!refListe);;
 
let depile refListe =
	match !refListe with
		|[] -> failwith("Pile vide !")
		|t::q -> begin refListe := q ; 
					   t;
				 end;;
 
let additionner a b = a +. b;;
let soustraire a b = a -. b;;
let multiplier a b = a *. b;;
let diviser a b = a /. b;;
let rec factoriel n =
	if n <= 0. then 1. else n *. factoriel(n -. 1.);;
let puissance a b =
	let x = ref a in
	for i = 2 to b do x := (!x) *. a done;
	!x;;
(*Racine carrée définie sur les réel par sqrt(nombre)*)

Où un lexem pouvant être soit un réel, soit un opérateur unaire (exemple : factoriel, cosinus...) ou opérateur binaire (addition, etc.)...

Et des fonctions d'empilage ou de dépilage que j'ai défini pour pouvoir manipuler chaque élément de la formule logique FP à l'aide d'une pile.

Est-ce correcte jusqu'à maintenant ? On nous a demandé de procéder de cette façon de toute manière...

Ainsi, pour définir une opération dans un lexem on aurait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
(*(a + b)*)
let F1 = opBinaire(a, additionner, b);;
Mais ce qui me gène c'est que je ne vois pas trop où est la notation postfixe là dedans en fait... car en écrivant a + b comme je l'ai fait au dessus on voit que c'est a + b et non a;b;+ comme ça devrai être en postfixe... à moins que ça soit un problème d'ordre de définition dans le type lexem... ?

Merci d'avance.