This is a Rust implementation of µKanren, a featherweight relational programming language. See the original Scheme implementation here for reference.
Iterator
trait.fresh
based on traits (macro-free API).bool
, char
, &str
, and unit type atoms.ToValue
trait that converts vectors and arrays into cons-lists.state!
to inspect and specify state.Here's a simple example, defining and using the appendo
predicate.
```rust use ukanren::*;
fn appendo(first: Value, second: Value, out: Value) -> BoxedGoal
let goal = fresh(|x, y| appendo(x, y, [1, 2, 3, 4, 5].tovalue()));
asserteq!(
goal.run(2).collect::
More examples can be found in the tests/
folder and the API documentation.
Made by Eric Zhang for CS 252r. All code is licensed under the MIT License.