例如以下事实:
老王是小王的双亲之一
老赵是小王的双亲之一
老王是位男性
老赵是位女性
可以表示为:

这里的parent、male、female等关系名,并不是PROLOG语言所规定的关键词,是用户自己定义的,就如同在其他语言中定义函数一样。

parent(old-wang. wang).
parent(old-zhao wang).
male(old-wang).
femal(old-zhao).

一条规则可以由一个完整的句子表示,例如,规则"如果X、Y是Z的双亲,并且X是位男性,Y是位女性,则X是Y的丈夫。"用子句表示出来就是
husband(X,Y):-parent(X,Z),
parent(Y,Z),
male(X),
female(Y).
其中句体中的","号表示项与项之间是"与"的关系。而子句与子句之间是"或"的关系。如关于双亲关系,我们可以定义如下:
parent(X,Y):-mother(X,Y).
parent(X,Y):-father(X,Y).
其含义为"如果X是Y的母亲,则X是Y的双亲之一,或者X是Y的父亲,则X是Y的双亲之一"。
PROLOG允许递归定义,通过递归,可以定义出很多我们所需要的规则。例如,整数N的阶乘可以表示为
0!=1
1!=1
N!=N*(N-1)!
若我们用factorial(N,M)表示N的阶乘为M,则factorial可以定义为

用事实表示0的阶乘为1,1的阶乘为1。
factorial(0,1).
factorial(1,1).
如果N1是N-1,且N1的阶乘是M1,且M是N×M1,则N的阶乘是M。
factorial(N,M):- N1 is N-1,
factorial(N1,M1),
M is N*M1.
其中is的功能是使得其左边的变量得到右边的算术表达式的值。
运用表模式,我们还可以定义出许多表处理的关系。例如,假定我们用append(L1,L2,L)表示表L是表L1与L2合并得到的结果表。则其定义如下:

一个空表与表L合并,其结果还是表L。
append([ ],L,L).
如果表T1与表L合并,结果为T2的话,则非空表[H |T1]与表L合并,结果为[H |T2]。也就是说,结果表的表头是第一个表的表头,结果表的表尾,是第一个表的表尾与第二个表的合并结果。
append([H |T1],L,[H |T2]):-append(T1,L,T2).
第一个子句是说,如果一个空表与表L合并,则结果表就是L本身;第二个子句是说,如果一个非空表[H |T1]与表L合并,则结果表的表头应是第一个表的表头H,结果表的表尾T2是第一个表的表尾T1与第二个表L合并得到的结果表。
PROLOG程序的执行是通过询问实现的,询问是通过如下形式的只有句体的子句实现的:
?-P1,P2,…,Pk
它表示"P1∧P2∧…∧Pk为真吗?"其中Pi中可以含有变量,当询问成功时,系统给出这些变量的值。例如

询问:表[1,2]与表[3,4]可以合并为一个表吗?
?-append([1,2],[3,4],L).
该结果表示,表[1,2]与表[3,4]可以合并为一个表(yes表示出了这一点),其结果为L=[1,2,3,4]。
L=[1,2,3,4]

yes
下面我们通过一个例子来说明PROLOG是如何进行工作的。假设关于Y是X的后代的子句定义如下:
descendant(X,Y):-child(X,Y)
descendant(X,Z):-child(X,Y),descendant(Y,Z)
也就是说,"若Y是X的孩子则Y为X的后代,或者若Y是X的孩子,而Z是Y的后代,则Z是X的后代。",并且已知以下事实:
child(john,mary).
child(john,bill).
child(bill,bob).
child(bill,susan).
这时若询问以下问题:
?-descendant(john,bob).