use elfmind::*; 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))); 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); }