diff options
Diffstat (limited to 'crates/elfmind/src/main.rs')
| -rw-r--r-- | crates/elfmind/src/main.rs | 48 |
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); } |
