Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 3ed7d777 authored by POTTIER Francois's avatar POTTIER Francois
Browse files

README.

parent 16942dd3
No related branches found
No related tags found
No related merge requests found
# Fix: memoization and fixed points made easy
`fix` is an OCaml library that helps with various constructions
that involve memoization and recursion.
## Installation
Type `opam install fix`.
## Overview
At the top of an OCaml module, declare `open Fix`.
This gives you access to the following submodules:
* [`Gensym`](src/Gensym.mli) offers a simple facility
for **generating fresh integer identifiers**.
* [`Memoize`](src/Memoize.mli) offers a number of combinators
that help **construct possibly recursive memoizing functions**, that
is, functions that lazily record their input/output graph,
so as to avoid repeated computation.
* [`Tabulate`](src/Tabulate.mli) offers facilities
for **tabulating a function**, that is, eagerly evaluating this function
at every point in its domain, so as to obtain an equivalent
function that can be queried in constant time.
* [`Number`](src/Number.mli) offers a facility for
**discovering and numbering the reachable vertices** in a directed graph.
* [`HashCons`](src/HashCons.mli) offers support for
**setting up a hash-consed data type**, that is, a data type whose
values carry unique integer identifiers.
* [`Fix`](src/Core.mli) offers support for **computing
the least solution of a set of monotone equations**,
as described in the unpublished paper
[Lazy Least Fixed Points in ML](http://gallium.inria.fr/~fpottier/publis/fpottier-fix.pdf).
In other words, it allows defining a recursive function of
type `variable -> property`, where
**cyclic dependencies** between variables are allowed,
and properties must be equipped with a partial order.
* `Prop` defines a few common partial orders, including
[`Prop.Boolean`](src/Boolean.mli),
[`Prop.Option`](src/Option.mli),
[`Prop.Set`](src/Set.mli).
* [`Glue`](src/Glue.mli) contains glue code that helps
build various implementations of association maps.
The signatures that appear in the above files,
such as `MEMOIZER`, `TABULATOR`, `SOLVER`, and so on,
are defined [here](src/Sigs.ml).
<!-- demos -->
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment