# Software

On this page, you will find libraries for the OCaml (Objective Caml) language, a strongly typed functional language with great abstraction and performance characteristics.

### Lacaml

Lacaml is a *binding* to the famous
BLAS and
LAPACK libraries which offer
linear algebra routines. It is developed in collaboration with
Markus
Mottl and several other people. To use it you should be
familiar with BLAS and LAPACK. The following
quick reference
guide for the BLAS,
LAPACK
quick reference, and
LAPACK Documentation
may be useful to you. For the precise
description of the functions, consult the man pages
online
or, if you installed them on your machine (if you use Linux, they
should be in the packages of your distribution), read them with
Emacs: `M-x man`

(under Unix) ou ```
M-x
woman
```

(all systems; you must first set

`(add-to-list 'woman-manpath "`*C:/path/to/lapack/*manpages/blas/man")
(add-to-list 'woman-manpath "*C:/path/to/lapack/*manpages/man")

in your `~/.emacs`

).
### Delimited overloading

Delimited
overloading (`pa_do`

) is a syntax extension
(thanks to camlp4) to allow (an extensible) operator and
function *overloading* in OCaml. It also performs some
optimizations, for example for expressions involving complex
numbers.

### OCaml odepack

OCaml
odepack is a *binding* to
odepack, a
collection of solvers for the initial value problem for ordinary
differential equation systems.

### Mesh

Mesh is a simple module allowing to call various 2D mesh generators (in particular triangle) in a unified fashion. It also provides useful functions to visualize the mesh as well as P1 functions defined on it.

### L-BFGS-B

The module lbfgs is a binding to the L-BFGS-B FORTRAN code. It is a limited-memory quasi-Newton code for unsconstrained and bound-constrained optimization.

### 1D integration

The module Integration1D gathers various integration routines inspired from QUADPACK. This is pure OCaml code.

### 1D optimization

The findlib
package optimization1d is made of two modules,
`Min1D`

and `Max1D`

, that provide
functions to seek minimums or maximums of mathematical
functions *f : R → R*.
This is pure OCaml code.

### 1D root finding

The
module Root1D provides functions, in particular
Brent's
method, to seek roots of mathematical
functions *f : R → R*.
This is pure OCaml code.

### Module FFTW 3

The Fftw3 module is a binding to the famous fast Fourier transform library FFTW.

The bindings to the old FFTW2 library are not longer developed.

### oasis2opam

oasis2opam is a Tool to convert OASIS metadata to OPAM package descriptions.

### OCaml Lego Mindstorm library

The
Mindstorm module allows to control
Lego^{®}
Mindstorm NXT bricks through the bluetooth protocol.
It was used by three students in mathematics
to program two robots: the first finds its way out of a maze and the
second solves the Rubik's cube. You can
read their interview (in French).

### OCaml CSV

OCaml CSV is a module to read and write CSV (comma separated values) files. It understands Excel peculiarities (which do not conform to the standard).

### Benchmark

Benchmark is a module to measure and compare running times of functions written in OCaml.

### Rope library

The Rope module
implements the
"rope datastructure", an efficient immutable equivalent of
strings. This module is ready to replace `String`

for most applications.

### OCamlDBI

OCamlDBI is a generic interface to databases inspired by Perl DBI.

### OCaml-FreeTDS

The Freetds module offers a binding to the DB-lib API of FreeTDS as well as a deprecated binding to ct. It is recommended to use OCamlDBI (which uses this module as a driver) to benefit for higher level functions.

### Lpd

The Lpd (Line Printer Deamon) library is a server for the LPD protocol completely written in OCaml (and therefore fully working on windows).

### ANSITerminal

ANSITerminal is a module allowing to use the colors and cursor movements on ANSI terminals. Here is its interface.

### OCaml-gnuplot

OCaml-gnuplot is a module which uses gnuplot to graph scientific data from OCaml.

This module is obsolete and only bugs will be corrected. It will be replaced by Archimedes (under development) which does not depend anymore on gnuplot.