A Primer on Logic Programming
juxt.pro
juxt.pro
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.
>Ancestor(X, Y) → Parent(X, Y) ∨ (Parent(X, Z) ∧ Ancestor(Z, Y)).
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.
Ancestor(X, Y) ← Parent(X, Y).
Ancestor(X, Y) ← Parent(X, Z) ∧ Ancestor(Z, Y).