lhasPizza('bun'); likePizza('bun'); hasPizza('richard'); likePizza('richard'); hasPizza('mary'); likePizza('susan'); // rule: head :- body; // body: p1, p2, p3 ...; // conjunction of predicates. hasMoney('mary'); happy(X) :- hasPizza(X), likePizza(X); happy(X) :- hasMoney(X); // queries happy('bun'); >> true happy('bun') does not exist directly. look for happy(X) :- hasPizza(X), likePizza(X); X binds to 'bun' (binding) look for hasPizza('bun'): true look for likePizza('bun'): true happy(X); X = 'bun' X = 'richard'