View Source Guesswork
Guesswork is a logic programming library for Elixir. It is heavily inspired by Prolog, but attempts to use idiomatic Elixir when expressing problems and their solutions.
Versions
This project is tested on the following elixir/OTP versions:
- erlang 26.2.5
- elixir 1.16.3
Examples
All Examples are meant to be run with LiveBook and can
be found in the examples/
directory.
Design
Guesswork is designed to have two stages when solving problems: resolution and
unification.
During resolution statements (Guesswork.Ast.Statement
) are turned into streams
which, once run and turned into a Guesswork.Answer.Result
, unify possible
solutions looking for valid ones.
Benchmarks
All benchmarks are built with Benchee,
can be found in the benchmarks/
directory, and run with make run_benchmarks
(this can take a while, other make targets exist for individual benchmarks).
The results can be found in the benchmark_results/
directory.
Future Work
Development work is focused on two things, making the system more ergonomic, performant, and working through logic programming puzzles to figure out where the library is deficient. This list should not be considered a road map to 1.0.
- Constraint Logic Programming
- 8/N Queens Problem
Scheduling Problems- Sigil for building statements
Adding benchmarks