Packages

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.

Current section

Files

Jump to
guesswork CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.4.3] - 2024-09-08
### Added
- CI jobs now run a dry run release to check for problems.
### Fixed
- Fixed examples to not include unused functions.
## [0.4.3] - 2024-09-07
### Fixed
- Fixed the file list in mix.exs to not include non-existent files.
## [0.4.2] - 2024-09-07
### Fixed
- Include dependency cache in release job so that publish works.
## [0.4.1] - 2024-09-07
### Fixed
- Fixed CI bug where hex wasn't pulled and so releases didn't make it to hex.pm.
## [0.4.0] - 2024-09-07
### Added
- `Ast.term/1` now supports the pin operator for pulling in external values and
elixir expressions.
- Added `ExDoc` support.
- Telemetry has been added to the library:
- A new module `Guesswork.Telemetry` holds a GenServer that tracks spans and
metrics.
- Queries now have their own struct that allow tracking of queries by id.
- `Guesswork.Answer.Result.run/2` now reports a span that allows queries to be
tracked and timed.
- All assignments, substitutions, and tests are tracked (per query).
- Unions are now tracked in spans.
- A new example has been added to walk through this system.
- Simple benchmarks have been added to support telemetry operations.
- This project should now release to hex.pm and build a gitlab release on every
merge to master.
### Fix
- Fixed bug where tests continued to be processed even after one failed.
## [0.3.0] - 2024-07-23
### Added
- `Ast.term/1` accepts entities other than atoms.
- Added support for a `one_of` operator that assigns a stream to a variable.
- Added support for an `is` operator that assigns computation.
- Falsehoods can now be added to collections.
- Added support for a `set` operator that assigns a value to a variable.
- Added a new, default, empty collection the `query/2` defaults to.
- `Result.new/2` has been renamed to `Result.run/2` for consistency with `Stream`.
- `Fact` now evaluates rules lazily in case there is a loop.
- New, high level tests have been added to verify the entire system.
- Added an example for pythagorean triples.
### Fixed
- Nots are now properly respected such that `l_not(l_and(set(x, 1), set(x, 2)))` is
valid.
- Ands now evaluate their clauses such that infinite streams of answer sets can be
properly evaluated.
- The macros used to define rules and terms now take functions instead of un-exported
terms.
## [0.2.0] - 2024-06-27
### Added
- Added Credo linter.
- Added Dialyzer static analysis.
- Added a ci pipeline for MR quality control.
- Added a top level function for running queries.
- Added the classic family tree example.
- Added a `term/1` macro to make the process of making terms easier.
- Added implementations of `String.Chars` for all terms that mirrors the syntax
of `term/1`.
- Knowledge bases have been generalized to use a behavior, which is taken advantage
of with the new `Guesswork.KnowledgeBase.Collection` which makes it easy to create
static collections of rules and facts.
- Add LICENSE.
- Added a new `Guesswork.Answer.Result` module that makes it easier to evaluate and
display values on livebook.
### Fixed
- When facts are resolved they now search both for matching facts and matching
rules.
- Variables now create an internal id that is used for comparison within answer
sets so that separate variables with the same display name don't conflict.
- Fixed a bug in `And` where any repeating variable was seen as a conflict.
- `Statement.resolve/2` and `Guesswork.query/2` both return streams so that large
problem spaces don't create issues.
## [0.1.0] - 2024-06-19
- init