Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
(* 1.5 Algorithme de dérivation ****************************************)
type expr = Const of int | Var of string | Add of expr*expr
| Mult of expr*expr;;
let zero = Const 0;;
let un = Const 1;;
let x = Var "x";;
let y = Var "y";;
let z = Var "z";;
let plus x y = Add(x,y);;
let prod x y = Mult(x,y);;
let e1 = plus x x;;
let e2 = prod x x;;
let e3 = plus (prod x (plus y un)) z;;
let rec print_expr = function (Const n) -> print_int n
| (Var s) -> print_string s
| (Add(e1,e2)) -> print_string "("; print_expr e1; print_string " + ";
print_expr e2; print_string ")"
| (Mult(e1,e2)) -> print_string "("; print_expr e1; print_string " * ";
print_expr e2; print_string ")";;
let print e = print_expr e; print_newline() ;;
(* version pour afficher directement les expressions *)
let rec fprint_expr f = function (Const n) -> Format.pp_print_int f n
| (Var s) -> Format.pp_print_string f s
| (Add(e1,e2)) -> Format.pp_print_string f "(";
fprint_expr f e1;
Format.pp_print_string f " + ";
fprint_expr f e2;
Format.pp_print_string f ")"
| (Mult(e1,e2)) -> Format.pp_print_string f "(";
fprint_expr f e1;
Format.pp_print_string f " * ";
fprint_expr f e2;
Format.pp_print_string f ")";;
#install_printer fprint_expr;;
let rec dx_expr = function (Const n) -> zero
| (Var s) -> if (s="x") then un else zero
| (Add(e1,e2)) -> Add(dx_expr e1, dx_expr e2)
| (Mult(e1,e2)) -> Add(Mult(dx_expr e1, e2), Mult(e1, dx_expr e2));;
let rec simplify = function
(Add(e1,e2)) -> ( match (simplify e1, simplify e2) with
(Const 0, e) -> e
| (e, Const 0) -> e
| (se1, se2) -> Add(se1,se2) )
| (Mult(e1,e2)) -> ( match (simplify e1, simplify e2) with
(Const 0, _) -> zero
| (Const 1, e) -> e
| (_, Const 0) -> Const 0
| (e, Const 1) -> e
| (se1, se2) -> Mult(se1, se2) )
| e -> e;;
let dx e = print (simplify (dx_expr e));;