open Leibniz let () = print_endline "symbolic constants\n"; let area = Parser.parse "pi * r^2" in print_endline ("circle area: A = " ^ Expr.to_string area); let dA_dr = Diff.diff "r" area in print_endline ("dA/dr = " ^ Expr.to_string dA_dr); let r_val = 3.0 in let a_val = Eval.eval [("r", r_val)] area in Printf.printf "A(%.1f) = %.6f\n" r_val a_val; print_endline "\nexponential growth\n"; let growth = Parser.parse "e^(k * t)" in print_endline ("N(t) = " ^ Expr.to_string growth); let dN_dt = Diff.diff "t" growth in print_endline ("dN/dt = " ^ Expr.to_string dN_dt)