README.md

# 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](https://livebook.dev/) 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](https://hexdocs.pm/benchee/readme.html),
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~~