Skip to content

Kr1s1m/Prolog-Interpreter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 

Repository files navigation

Haskellog

Simple Prolog interpreter written in Haskell

Hello!

This is an university project made in Haskell for Functional programming course.

Supported:

  • Constants*
  • Rules and facts**
  • Infinite generation

*Only atom constants are supported. Lists, numbers and aritmetic operations and not yet implemented.

**Rules only support logical AND via "," in their body.

How to use:

  • Load Main module into GHCi and run main function by typing "main" in *Main> prompt
  • Load .pl file with valid Prolog code by entering its full path when prompted
    • You are now inside a Read Evaluate Print Loop (REPL) made for this version of Prolog.
    • The prompt of this REPL is *Haskellog>
  • Enter commands inside *Haskellog> prompt.

Supported commands

  • *Haskellog> :help

    • Get a list of supported commands.
  • *Haskellog> ??

    • Get a list of all rules and facts. Prints the current state of the knowledge base.
  • *Haskellog> blue(sky).

    • Adds fact "blue(sky)." to knowledge base.
  • *Haskellog> p(X, Y) :- q(X, Z), r(Z, Y).

    • Adds rule "p(X,Y):-q(X,Z),r(Z,Y)." to knowledge base.
  • *Haskellog> ?- p(X, Y).

    • Make a query. To get more answers enter ";". Enter anything else (for example ".") to stop.
  • *Haskellog> ?- q1(X, Y, Z), q2(Y), q3(T).

    • Make multiple queries at once connected with logical AND similar to a rules body.
  • *Haskellog> :q

    • Quit interactive loop (exits out of *Haskellog> prompt).

Please reload Main module (*Main> :r) before running main function again after *Haskellog> :q

Sources and inspirations for code and approach

Releases

No releases published

Packages

No packages published