summaryrefslogtreecommitdiff
path: root/crates/elfmind/src/main.rs
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-09-09 02:52:11 -0400
committerLLLL Colonq <llll@colonq>2026-09-09 02:52:11 -0400
commited7819a3c3139a2caaf4e9bcdf0a968b8d3b0069 (patch)
tree3f8e6ec3a6ec3ee4dfec3351ba5a19f0cd3b523b /crates/elfmind/src/main.rs
parent1dc97459be2fbe2c829d4cce73570396d130dd33 (diff)
Add initial work on Datalog
Diffstat (limited to 'crates/elfmind/src/main.rs')
-rw-r--r--crates/elfmind/src/main.rs48
1 files changed, 47 insertions, 1 deletions
diff --git a/crates/elfmind/src/main.rs b/crates/elfmind/src/main.rs
index f7a6450..748ca9d 100644
--- a/crates/elfmind/src/main.rs
+++ b/crates/elfmind/src/main.rs
@@ -1,5 +1,51 @@
use elfmind::*;
+use knowledge::*;
fn main() {
- println!("yo");
+ 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)));
+ let vt = ctx.var("time");
+ let vi = ctx.var("item");
+ db.add_rule(Rule {
+ head: Relation::UsedItemAt(
+ Hole::Val(character::Character::Tyumici),
+ Hole::Var(vi),
+ Hole::Var(vt),
+ ),
+ body: vec![
+ Relation::TimeIs(Hole::Var(vt)),
+ Relation::HasItem(Hole::Val(character::Character::Tyumici), Hole::Var(vi)),
+ ],
+ });
+ let vt = ctx.var("time");
+ let vc = ctx.var("char");
+ db.add_rule(Rule {
+ head: Relation::FriendOf(
+ Hole::Val(character::Character::Naesten),
+ Hole::Var(vc),
+ ),
+ body: vec![
+ Relation::TimeIs(Hole::Var(vt)),
+ Relation::UsedItemAt(Hole::Var(vc), Hole::Val(item::Item::Apple), Hole::Var(vt)),
+ ],
+ });
+ let vc1 = ctx.var("char");
+ let vc2 = ctx.var("char");
+ let vc3 = ctx.var("char");
+ db.add_rule(Rule {
+ head: Relation::FriendOf(
+ Hole::Var(vc1),
+ Hole::Var(vc3),
+ ),
+ body: vec![
+ Relation::FriendOf(Hole::Var(vc1), Hole::Var(vc2)),
+ Relation::FriendOf(Hole::Var(vc2), Hole::Var(vc3)),
+ ],
+ });
+ db.apply_rules();
+ println!("{:#?}", db);
}