1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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();
println!("{}", db);
println!("{}", db.query().fact(Relation::TimeIs(8)).fact(Relation::TimeIs(9)).ask());
}
|