(* é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é *) 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;; (* un échantillon: si on ignore le mult_float, on écrit (prefix *.)*) let essai=[Valeur 2. ;Unaire sin; Valeur 4.;Binaire mult_float];;