Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
POTTIER Francois
fix
Commits
3ed7d777
Commit
3ed7d777
authored
Nov 26, 2018
by
POTTIER Francois
Browse files
README.
parent
16942dd3
Changes
1
Hide whitespace changes
Inline
Side-by-side
README.md
0 → 100644
View file @
3ed7d777
# 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 -->
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment