(* évaluateur d'eap, version Quercia *) type 'a lexeme = |Valeur of 'a |Unaire of ('a->'a) |Binaire of ('a->'a->'a) ;; type 'a eap = 'a lexeme list;; (* evalue va fournir la valeur de l'eap nommée forme -> pile contiendra les valeurs en attente -> reste contiendra le reste de la formule non encore traité *) open List;; let evalue forme= let pile=ref [] and reste= ref forme in while !reste <> [] do begin match hd !reste with |Valeur v->pile:=v:: !pile |Unaire f->pile:=(f (hd !pile))::(tl !pile) |Binaire b->pile:= let d=hd !pile and t=tl !pile in let e=hd t in (b e d)::tl t end; reste:=tl !reste done; hd !pile ;; let mult_float a b = a*.b;; let essai=[Valeur 2. ;Unaire sin; Valeur 4.;Binaire mult_float];;