1、PROLOG程序按下面目标的一般形式由事实和规则组成:
p:-p1,p2,..pN.
(,表示合取∧ ;表示析取∨)
其中,p是规则的头,Pk是子目标。当且仅当所有子目标满足,头目标p才能满足。:-可理解为if。这种表达称为Horn子句
如果是;可理解,当这些子目标至少满足一个就可以了
2、举例:
parent(X,Y):-father(X,Y).
parent(X,Y):-mother(X,Y).
意味着:如果X是Y的父亲或母亲,则X是Y的双亲。
祖先可以定义规则为:
(1)ancestor(X,Y):-parent(X,Y)
(2)ancestor(X,Y):-ancestor(X,Z),ancestor(Z,Y).
3、PROLOG系统一般由谓词数据库(规则和事实)、解释机(向谓词数据库发出查询,谓词数据库负责回答)、用户
解释器会尝试用深度优先和广度优先搜索。
4、举例:
接着祖先的定义补充以下事实
(3)parent(ann,mary).
(4)parent(ann,susan).
(5)parent(mary,bob).
(6)parent(susan,john).
向PROLOG提问确定Ann是否是Susan的祖先
:-ancestor(ann,john).
开头没有意味着规则无头,意味着是由PROLOG证明的条件。
接收提问后,PROLOG开始搜索那些规则头与输入模式ancestor(ann,john)相匹配的语句,称模式匹配。步骤如下:
A)与祖先规则(1)相匹配,X为ann,Y为john,PROLOG开始尝试匹配(1)的体,即parent(X,Y)。
parent(ann,john)无匹配。
B)PROLOG继续祖先规则(2),X为ann,Y设为john,证明(2)的ancestor(ann,Z)和ancestor(Z,john)这2个子目标为真。
C)PROLOG尝试证明ancestor(ann,Z),从顶端(也就是(1))开始,与(3)匹配,把Z设为mary,尝试把ancestor(Z,john)当做ancestor(mary,john)来匹配,与(1)匹配,但是parent(mary,john)搜索失败。
D)PROLOG重新考虑Z为mary,显示这个选择没用,回溯寻找不同的搜索路径,搜索(4),设Z为susan,然后(6)parent(susan,john).成立
E)返回查询为真
PROLOG的控制结构属于马尔可夫算法类型,模式匹配的搜索次序由Horn子句输入次序决定。而相反的是基于规则的专家系统按POST模式,输入次序并无影响。