symbolic mathematics engine in OCaml with differentiation, integration, simplification, and numerical methods
17

Configure Feed

Select the types of activity you want to include in your feed.

leibniz / lib / eval.ml
1.1 kB 33 lines
1open Expr 2 3let rec eval env = function 4 | Const f -> f 5 | SymConst Pi -> 4.0 *. atan 1.0 6 | SymConst E -> exp 1.0 7 | Var v -> 8 (try List.assoc v env 9 with Not_found -> failwith ("unbound variable: " ^ v)) 10 | Add (e1, e2) -> eval env e1 +. eval env e2 11 | Sub (e1, e2) -> eval env e1 -. eval env e2 12 | Mul (e1, e2) -> eval env e1 *. eval env e2 13 | Div (e1, e2) -> eval env e1 /. eval env e2 14 | Pow (e1, e2) -> eval env e1 ** eval env e2 15 | Neg e -> -.(eval env e) 16 | Sin e -> sin (eval env e) 17 | Cos e -> cos (eval env e) 18 | Tan e -> tan (eval env e) 19 | Sinh e -> sinh (eval env e) 20 | Cosh e -> cosh (eval env e) 21 | Tanh e -> tanh (eval env e) 22 | Asin e -> asin (eval env e) 23 | Acos e -> acos (eval env e) 24 | Atan e -> atan (eval env e) 25 | Atan2 (e1, e2) -> atan2 (eval env e1) (eval env e2) 26 | Exp e -> exp (eval env e) 27 | Ln e -> log (eval env e) 28 | Log (base_e, arg) -> 29 let b = eval env base_e in 30 let a = eval env arg in 31 log a /. log b 32 | Sqrt e -> sqrt (eval env e) 33 | Abs e -> abs_float (eval env e)