Facts, Rules & Queries
4.1 Facts
A fact states an unconditional truth:
likes is the functor (predicate name), 2 its arity — written likes/2.
likes(mary, wine).
likes(john, mary).
capital(france, paris).
age(peter, 7).4.2 Rules
Head :- Body. — "Head is true if Body is true".
Multiple clauses = alternatives (logical OR):
happy(X) :- likes(X, wine). % single condition
friends(X, Y) :- likes(X, Y), likes(Y, X). % , means AND
can_drive(X) :- age(X, A), A >= 18.
fun(X) :- red(X) ; car(X). % ; means OR (prefer separate clauses)animal(X) :- dog(X).
animal(X) :- cat(X).4.3 Queries
?- likes(mary, wine). % yes/no question
true.
?- likes(mary, X). % what does mary like?
X = wine.
?- likes(X, Y). % all pairs
?- friends(john, mary).4.4 Logical reading vs procedural reading
grandparent(X, Z):- parent(X, Y), parent(Y, Z). Declarative: for all X, Y, Z: if X is a parent of Y and Y is a parent of Z, then X is a grandparent of Z.
Procedural: to prove grandparent(X, Z), first prove parent(X, Y), then prove parent(Y, Z).
4.5 Clauses, predicates, programs
Clause: a fact or a rule.
Predicate (procedure): all clauses with the same name/arity.
Program: a set of predicates.
foo/1 and foo/2 are different predicates.
4.6 Horn clauses & the closed-world assumption
Prolog clauses are Horn clauses (at most one positive literal). Prolog uses the closed-world assumption: anything not provable is considered false.