Skip to content

aliheidary1381/prolect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

A simple prolog interpreter in OCaml

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published