FaCiLe requires only the OCaml system (release 3.02 or greater) and should
work in any environment supporting this system. It is developed in a Linux
environment on PC architecture but does not use any specificities of Unix. It
should work on other operating systems (i.e. MS Windows, Mac OS...), provided
that the installation process is customised to the environment.
FaCiLe Structure and Naming Conventions
The library is split into numerous modules and submodules. They are all
included (possibly with a limited user-oriented interface) into the main
Facile which should be opened by any other
modules using FaCiLe. All the modules are extensively described in part II
of this documentation. We do not recommend to users to open
Facile but to use prefixed notations (e.g. function
Cstr is written
Cstr.post). The pseudo-module
Easy is the exception and should be opened: it provides several
aliases to the most frequently used values (see 4.1) and
To avoid interferences with other modules of the user, all the modules are
aliased in the
Facile module and implementation module files are all
fcl_ (except of course
Facile itself). For example,
implementation of module
Gcc is in file
fcl_gcc.ml and alias
module Gcc = Fcl_gcc
is defined in
facile.ml). This alias mechanism is
entirely transparent to the user of FaCiLe except for the one interested by
the implementation of the library. The only possible visibility of
prefix is given by the uncaught exceptions printer (e.g.
The reference part of this documentation is automatically generated from module
.mli). Some available functions, types or modules are
intentionally not documented or even hidden in
Facile module. They are
not intented to the casual user.
Values and types names try to benefit as much as possible from the modularity.
For example, most of the types are named
t: type of constraints is
Cstr.t, type of domains is
Domain.t... In the same way, printing
functions are named
fprint, constraints are named
Standard or label mode of the OCaml compiler (option
be used with the library. FaCiLe makes use of labels (labelled arguments) as
less as possible; only optional arguments are labelled.
Compilation with FaCiLe
FaCiLe is provided as bytecode and native code1 libraries.
Bytecode version is compiled with debugging information (
-g option of
ocamlc) and then can be used with the source-level replay debugger
ocamldebug). A lot of checks are done in this mode and exceptions may
be raised revealing bad usage of the system (``fatal'' errors) or bugs in the
system itself (``internal'' errors). In the second case, diligent users
should send a bug report to the developers.
In the native code version, these redundant checks are not done and this mode
should be used only on well-tried code.
Makefile in the
examples directory of the distribution
provides generic rules to compile with FaCiLe in both modes producing
.out (bytecode) or
.opt (native code) executables.
The library may also be used through linked toplevel produced with the
following command (after installation):
ocamlmktop -o facile -I +facile facile.cma
This is the toplevel used in the inlined examples of this documentation and invoked
with the command line:
./facile -I +facile
The FaCiLe distribution and documentation are available from the web site where general information can be found:
Questions, bug reports... can be mailed to
Installation of FaCiLe is described in the README file of the
distribution. Below is a copy of the corresponding part:
All you need is the Objective Caml 3.02 (or greater) compiler and
standard Unix tools (make...).
0) Configure the library. The single option of configuration is the
directory you want to put the library files in (facile.cma, facile.cmxa,
facile.a facile.cmi). Default is the subdirectory "facile" of the Ocaml
library directory (returned by "ocamlc -where").
./configure [--faciledir <target directory>]
1) First compile the library with a simple
2) Check the result
You should get a solution for the 8 queens problem.
3) Then install the library with a (usually as root)
The directory examples of the distribution contains some examples and a
generic Makefile to compile files with FaCiLe. Examples are taken
from the classic litterature:
- Give back change for any amount
- Organize a golf tournament for 8 teams of 4 players
- Find optimal Golomb rulers
- Solve the famous
mt10 scheduling problem --
- To count and to be counted
- Stabilize preferences among spouses
- Use FaCiLe as a Prolog interpreter on a family tree problem
- Place queens on a chessboard
- My grocer's favorite arithmetic puzzle
- Tile a big square with small squares
- If supported by your
architecture. See http://caml.inria.fr/ocaml/portability.html