package prolect
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=390fa82ebd26bd25809572bbe44ee6ace7ee845f285a7b6b55ce668be3bde2b2
doc/README.html
Prolect
An OCaml Derivation of the Warren Abstract Machine.
Language support is limited to pure Prolog i.e. predicate logic with Horn clauses.
This is a very simple & plain Prolog interpreter with no support for negation as failure, integers, lists, operators or built-in predicates.
Implementaion-wise, there is no tabling or memoization nor any type of term indexing. The core part of the interpreter is only ~100 LOC.
Usage
Install using the opam
package manager:
opam install prolect
Then run it, potentially with a consulting file:
prolect test.pl
Linux
If you don't want to use opam, download the .exe
from GitHub releases, add the executable attribute (chmod +x prolect.exe
), and then:
./prolect.exe
Other OSes
If you don't want to use opam, download the .bc
from GitHub releases, install the OCaml Runtime, and then:
ocamlrun prolect.bc
Compile it yourself
If you don't want to use the bytecode interpreter either, you can compile the project yourself (e.g. for getting a performance boost on other OSes).
First, install the dependencies (ocaml
, dune
, etc.). Then:
dune exec prolect --profile release
The exe
To get the executable:
dune build . --profile release
Run the REPL:
_build/default/bin/prolect.exe
Example
Provided that you've given the test consulting file (i.e. running prolect test.pl
instead of prolect
):
Welcome to Prolect (version 1.1.3)
?- ancestor(terah, jacob).
true .
?- ancestor(terah, X).
X = sarah ;
X = abraham ;
X = isaac ;
X = jacob ;
X = isaac ;
X = ismael ;
X = jacob .
?- loves(sarah, X).
X = isaac ;
X = loves(sarah, isaac) ;
X = loves(sarah, loves(sarah, isaac)) .
?- ^C
Future plans
- Improve error handling
- Add files importing facilities
- Add term indexing