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); }