Solving a sample query
The vegetable database:
/* 1 */ color(banana, yellow).
/* 2 */ color(squash, yellow).
/* 3 */ color(apple, green).
/* 4 */ color(peas, green).
/* 5 */ color(broccoli, green).
/* 6 */ fruit(banana).
/* 7 */ fruit(apple).
/* 8 */ vegetable(squash).
/* 9 */ vegetable(peas).
/* 10 */ vegetable(broccoli).
/* 11 */ eats(bob, X) :- color(X, green), vegetable(X).
And a query: eats(bob, Y).
- Goal: eats(bob, Y) in other words, what does bob eat?
- MATCH 1: Clause 11 Instantiate: {X=Y}
- Goal: color(Y, green), vegetable(Y)
- MATCH 2: Clause 3 Instantiate: {X=Y=apple}
- Goal: vegetable(apple)
- Fail. Backtrack and redo MATCH 2, starting at clause 4
- Goal: color(Y, green), vegetable(Y)
- MATCH 3: Clause 4 Instantiate: {X=Y=peas}
- Goal: vegetable(peas)
- MATCH 4: Clause 9
- Success: Y=peas. eats(bob, peas)!
- User types ";". Backtrack. Redo MATCH 4, starting at clause 10
- Goal: vegetable(peas)
- Fail. Backtrack and redo MATCH 3, starting at clause 5
- Goal: color(Y, green), vegetable(Y)
- MATCH 5: Clause 5 Instantiate: {X=Y=broccoli}
- Goal: vegetable(broccoli)
- MATCH 6: Clause 10
- Success: Y=broccoli. eats(bob, broccoli)!
- User types ";". Backtrack. Redo MATCH 6, starting at clause 11
- Goal: vegetable(broccoli)
- Fail. Backtrack and redo MATCH 5, starting at clause 6
- Goal: color(Y, green), vegetable(Y)
- Fail. Backtrack and redo MATCH 1, starting after clause 11
- Goal: eats(bob, Y)
- Fail.