5 releases (breaking)
0.5.0 | May 31, 2023 |
---|---|
0.4.0 | Jan 2, 2023 |
0.3.0 | Aug 3, 2021 |
0.2.0 | Jul 3, 2020 |
0.1.0 | Jul 3, 2020 |
#936 in Math
Used in 2 crates
145KB
3K
SLoC
Canrun is a logic programming library inspired by the *Kanren family of language DSLs.
- Intro blog post: https://esimmler.com/announcing-canrun/
- How it works (part 1): https://esimmler.com/building-canrun-part-1/
Status: Exploratory and Highly Experimental
I'm still quite new to both Rust and logic programming, so there are likely to be rough edges. At best it may be a useful implementation of something that resembles the core concepts of a Kanren while being idiomatically Rusty. At worst it may just be a poor misinterpretation with fatal flaws.
Quick Start
use canrun::{LVar, Query};
use canrun::goals::{both, unify};
let x = LVar::new();
let y = LVar::new();
let goal = both(unify(x, y), unify(1, x));
let result: Vec<_> = goal.query(y).collect();
assert_eq!(result, vec![1])
Dependencies
~1.5MB
~32K SLoC