Introductions to Prolog seem to suffer the "draw the rest of the fucking owl" problem. There's a huge gap from the introductory examples to building real projects.<p>What I would love to see more of is how to embed a prolog interpreter into a wider program, using the source program's data as the database, then prolog (or perhaps datalog) as an advanced query engine or rules engine.
Just a heads-up to the author:<p>>Ancestor(X, Y) → Parent(X, Y) ∨ (Parent(X, Z) ∧ Ancestor(Z, Y)).<p>That's a bug. The arrow needs to go to the left. Also, then, you can also opt to dispense with the disjunction and just use first-order logic normally.<p><pre><code> Ancestor(X, Y) ← Parent(X, Y).
Ancestor(X, Y) ← Parent(X, Z) ∧ Ancestor(Z, Y).</code></pre>