Module Calc

module Calc: sig .. end
Small library to evaluate simple arithmetic expressions.


This library evaluates simple arithmetic expression over floats. Regular operators (+,-,*,/,^) and some regular functions (sin, cos, tan, asin, acos, atan, log, log10, exp, sqrt) are implemented. Arithmetic expressions can contain variables.

Here is an example of expression : 3*x+sin(2) .

type op2 = 
| Plus
| Minus
| Times
| Div
| Pow
Type of binary operators
type op1 = 
| Func of (float -> float)
| MinusUn
Type of unary operators
type 'a t = 
| Float of float
| Op2 of 'a t * op2 * 'a t
| Op1 of op1 * 'a t
| Var of 'a
Type of tree which represent an arithmetic expression
module Env: sig .. end
Variable environment.
exception Unknown_variable of string
val eval : Env.t -> string t -> float
Evaluate a tree in the given environment.
Raises Unkown_variable if a variable is not defined in the environment.
val compress : Env.t -> string t -> string t
Compress a tree in the given environment, ie. evaluate everything that can be evaluated.

Some other functions


val eval_custom : ('a -> float) -> 'a t -> float
Evaluate a tree, the given function is used to evaluate variables.
val compress_custom : ('a -> float option) -> 'a t -> 'a t
Compress a tree using the given function, ie. evaluate everything that can be evaluated. A variable is untouched if the function returns None .
val bind : ('a -> 'b t) -> 'a t -> 'b t
Replace each variables by a subtree.
val bind_opt : ('a -> 'a t option) -> 'a t -> 'a t
Replace some variables by a subtree.
val fold : ('a -> 'b -> 'b) -> 'a t -> 'b -> 'b
Depth first left to right traversal of the tree.
val map : ('a -> 'b) -> 'a t -> 'b t
Change variables representation using the given function.
val iter : ?var:('a -> unit) ->
?float:(float -> unit) ->
?op1:(op1 -> unit) -> ?op2:(op2 -> unit) -> 'a t -> unit
Iteration on everything.
val vars : 'a t -> ('a -> unit) -> unit
Get the sequence of variables in the given tree. Use with sequence or containers.
val closure : ?env:Env.t ->
string t -> (string * 'a) list -> ('a -> float) -> float
Compress the string in the optional env and return the resulting closure.