| Crates.io | logic-eval |
| lib.rs | logic-eval |
| version | 0.1.2 |
| created_at | 2025-10-23 03:50:31.587951+00 |
| updated_at | 2026-01-25 03:46:40.581224+00 |
| description | A simple logic evaluator |
| homepage | |
| repository | https://github.com/ecoricemon/logic-eval |
| max_upload_size | |
| id | 1896583 |
| size | 155,058 |
A simple logic evaluator.
use logic_eval::{Database, parse_str, intern::DroplessInterner};
// Creates a DB.
let interner = DroplessInterner::default();
let mut db = Database::new(&interner);
let dataset = "
child(a, b).
child(b, c).
descend($X, $Y) :- child($X, $Y).
descend($X, $Z) :- child($X, $Y), descend($Y, $Z).
";
db.insert_dataset(parse_str(dataset, &interner).unwrap());
db.commit();
// Queries the DB.
let query = "descend($X, $Y).";
let mut cx = db.query(parse_str(query, &interner).unwrap());
let mut answer = Vec::new();
while let Some(eval) = cx.prove_next() {
let s = eval.into_iter().map(|assign| assign.to_string()).collect::<Vec<_>>().join(", ");
answer.push(s);
}
assert_eq!(answer, [
"$X = a, $Y = b",
"$X = b, $Y = c",
"$X = a, $Y = c",
])