package prolect

  1. Overview
  2. Docs
Pure prolog interpreter

Install

dune-project
 Dependency

Authors

Maintainers

Sources

source_code.tar.gz
sha256=390fa82ebd26bd25809572bbe44ee6ace7ee845f285a7b6b55ce668be3bde2b2

Description

A pretty basic interpreter for prolog with no support for integers, lists or anything other than pure logic

Tags

prolog interpreter

Published: 28 Aug 2025

README

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

Dependencies (4)

  1. ppx_optcomp
  2. linenoise os != "win32"
  3. dune >= "3.17"
  4. ocaml >= "5.1"

Dev Dependencies (1)

  1. odoc with-doc

Used by

None

Conflicts

None

OCaml

Innovation. Community. Security.