lilis

Library to Interpret Lindenmayer Systems
IN THIS PACKAGE
Module Calc

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.