use elfmind::*; use knowledge::*; fn main() { let mut ctx = Context::default(); let mut db = Database::default(); 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.query().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))), ], }).learn(); let vt = ctx.var("time"); let vc = ctx.var("char"); db.query().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))), ], }).learn(); let vc1 = ctx.var("char"); let vc2 = ctx.var("char"); let vc3 = ctx.var("char"); db.query().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))), ], }).learn(); println!("{:#?}", db.query().fact(Relation::TimeIs(Hole::Val(8))).ask()); }