summaryrefslogtreecommitdiff
path: root/crates/elfmind/src/main.rs
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-10-08 06:02:58 -0400
committerLLLL Colonq <llll@colonq>2026-10-08 06:02:58 -0400
commit742fcf6793e1a38d4cf65bf72832847c0fd679b4 (patch)
tree5ae1d7a91b570a4fa4acde8f2cf6f4bd45ce8920 /crates/elfmind/src/main.rs
parent09ff5f929853cc2ba1a1ed7ddb20566cd8fe021d (diff)
Add semi-naive Datalog evaluation
Diffstat (limited to 'crates/elfmind/src/main.rs')
-rw-r--r--crates/elfmind/src/main.rs24
1 files changed, 12 insertions, 12 deletions
diff --git a/crates/elfmind/src/main.rs b/crates/elfmind/src/main.rs
index cd811f7..19b8a03 100644
--- a/crates/elfmind/src/main.rs
+++ b/crates/elfmind/src/main.rs
@@ -4,13 +4,13 @@ use knowledge::*;
fn main() {
let mut ctx = Context::default();
let mut db = Database::default();
- db.add_fact(Relation::TimeIs(Hole::Val(6)));
- db.add_fact(Relation::TimeIs(Hole::Val(7)));
- db.add_fact(Relation::HasItem((Hole::Val(character::Character::Tyumici), Hole::Val(item::Item::Apple))));
- db.add_fact(Relation::FriendOf((Hole::Val(character::Character::Bobo), Hole::Val(character::Character::Naesten))));
+ db.query()
+ .fact(Relation::HasItem((Hole::Val(character::Character::Tyumici), Hole::Val(item::Item::Apple))))
+ .fact(Relation::FriendOf((Hole::Val(character::Character::Bobo), Hole::Val(character::Character::Naesten))))
+ .learn();
let vt = ctx.var("time");
let vi = ctx.var("item");
- db.add_rule(Rule {
+ db.query().rule(Rule {
head: Relation::UsedItemAt((
Hole::Val(character::Character::Tyumici),
Hole::Var(vi),
@@ -20,10 +20,10 @@ fn main() {
Relation::TimeIs(Hole::Var(vt)),
Relation::HasItem((Hole::Val(character::Character::Tyumici), Hole::Var(vi))),
],
- });
+ }).learn();
let vt = ctx.var("time");
let vc = ctx.var("char");
- db.add_rule(Rule {
+ db.query().rule(Rule {
head: Relation::FriendOf((
Hole::Val(character::Character::Naesten),
Hole::Var(vc),
@@ -32,11 +32,11 @@ fn main() {
Relation::TimeIs(Hole::Var(vt)),
Relation::UsedItemAt((Hole::Var(vc), Hole::Val(item::Item::Apple), Hole::Var(vt))),
],
- });
+ }).learn();
let vc1 = ctx.var("char");
let vc2 = ctx.var("char");
let vc3 = ctx.var("char");
- db.add_rule(Rule {
+ db.query().rule(Rule {
head: Relation::FriendOf((
Hole::Var(vc1),
Hole::Var(vc3),
@@ -45,7 +45,7 @@ fn main() {
Relation::FriendOf((Hole::Var(vc1), Hole::Var(vc2))),
Relation::FriendOf((Hole::Var(vc2), Hole::Var(vc3))),
],
- });
- db.apply_rules();
- println!("{:#?}", db);
+ }).learn();
+ println!("{:#?}", db.query().fact(Relation::TimeIs(Hole::Val(8))).ask());
+
}