use elfmind::*; fn main() { let mut db = Database::default(); db.query() .fact(Relation::HasItem((CharacterUnmasked::Assagioli, Item::Apple))) .fact(Relation::FriendOf((CharacterUnmasked::Bombieri, CharacterUnmasked::Cagliostro))) .learn(); db.query().rule(Rule { head: RelationHole::UsedItemAt(( Hole::Val(CharacterUnmasked::Assagioli), Hole::Var(Var(0)), Hole::Var(Var(1)), )), body: vec![ RelationHole::TimeIs(Hole::Var(Var(1))), RelationHole::HasItem((Hole::Val(CharacterUnmasked::Assagioli), Hole::Var(Var(0)))), ], }).learn(); db.query().rule(Rule { head: RelationHole::FriendOf(( Hole::Val(CharacterUnmasked::Cagliostro), Hole::Var(Var(0)), )), body: vec![ RelationHole::TimeIs(Hole::Var(Var(1))), RelationHole::UsedItemAt((Hole::Var(Var(0)), Hole::Val(Item::Apple), Hole::Var(Var(1)))), ], }).learn(); // db.query().rule(Rule { // head: RelationHole::FriendOf(( // Hole::Var(Var(0)), // Hole::Var(Var(2)), // )), // body: vec![ // RelationHole::FriendOf((Hole::Var(Var(0)), Hole::Var(Var(1)))), // RelationHole::FriendOf((Hole::Var(Var(1)), Hole::Var(Var(2)))), // ], // }).learn(); db.query().rule(Rule { head: RelationHole::FriendOf(( Hole::Var(Var(0)), Hole::Var(Var(1)), )), body: vec![ RelationHole::FriendOf((Hole::Var(Var(1)), Hole::Var(Var(0)))), ], }).learn(); println!("{}", db); println!("{}", db.query().fact(Relation::TimeIs(8)).fact(Relation::TimeIs(9)).ask()); }