Tiny-Prolog-in-OCaml
A tiny implementation of a small subset of the Prolog language, in OCaml. With small and fun examples.
WARNING: this project only has an educational purpose, for a real-world use of Prolog, please refer to GNU Prolog (gprolog).
This project contains the code and examples for a tiny Prolog implementation, written in the OCaml language.
- See this folder for instructions to build the project (really easy: clone, run make, relax and enjoy :tada:). The implementation focuses on a very small subset of Prolog, see the examples for a good idea of what is supported.
- See this other folder for examples (in English).
Example
- A theory has this form, first with axioms (predicate):
    cat(tom). mouse(jerry).
- Then maybe some rules, stating that a mouse is fast and a cat can be stupid:
    fast(X) <-- mouse(X). stupid(X) <-- cat(X).
- If you save this file (see this example), you can then load it with the prologbinary:
$ ./prolog/prolog ./examples/tomandjerry.pl
?- stupid(tom).
  { }
continue ? (o/n) [o] :
- This { }is an empty model, meaning thatstupid(tom).evaluates to True in an empty model (no need for instanciation).
- You can also ask your question directly in the command line:
    $ ./prolog/prolog ./examples/tomandjerry.pl "fast(tom)." ?- fast(tom).
- 
    An empty response mean that the term is false, no matter the model. 
- You can add more rules, as you want.
    ishuntedby(X, Y) <-- mouse(X), cat(Y).$ ./prolog/prolog ./examples/tomandjerry.pl "ishuntedby(tom, jerry)." ?- ishuntedby(tom, jerry). $ ./prolog/prolog ./examples/tomandjerry.pl "ishuntedby(jerry, tom)." ?- ishuntedby(jerry, tom). { }
- You can also add comments, that are lines starting with one or more #character.# the mouse always espace the cat! istrickedby(X, Y) <-- cat(X), mouse(Y).
More example
- See this folder,
- Or this notebook.
:scroll: License ? 
This (small) repository is published under the terms of the MIT license (file LICENSE). © Lilian Besson, 2018.