第2章 逻辑程序设计语言PROLOG 2.1基本PR0L0G 2.2 Turbo PR0L0G程序设计 蕌
2.1基本PRoL0G 2.1.1PR0L0G的语句 1.事实(fact)蕌 格式〈谓词名〉(〈项表〉).蕌 student(john).蕌 like(mary, music) abc 蕌 repeat. 功能一般表示对象的性质或关系。蕌
2.规则(rule)蕌 格式〈谓词名〉(〈项表〉):-〈谓词名〉(〈项表〉){, 〈谓词名〉(〈项表〉)} bird(X):-animal (X), has(X, feather).TE grandfather(X, Y) father(X, Z), father (z, y) run:start, stepl(X), step2(X), end. Yy 功能一般表示对象间的因果关系、蕴含关系或对应 关系
3.问题( question)蕌 格式?-〈谓词名〉(〈项表〉){,〈谓词名〉 (〈项表〉)} ?- student(john).蕌 ?-like(mary,X).湩 功能问题表示用户的询问,它就是程序运行的 目标
2.1.2PR0L0G的程序 PROLOG程序一般由一组事实、规则和问题组 成。问题是程序执行的起点,称为程序的目标。 likes(bell, sports) likes(mary, musIc)、蕌 likes(mary, sports).TE likes(jane, smith).蕌 friend(john, X):-likes(X, reading), likes(X, music) friend(john, X): -likes(X, sports), likes(X, music ?-friend (john, Y)
?-ikes(mary1X).潼 或盍 ? -likes( mary, musIC)潼 或蕌 ?- friend(XY),潼 或 日日 ?-likes(bell sports),EE ikes(mary; musIc),蕌 friend(john,X).潼
2.1.3PR0L0G程序的运行机理 1.自由变量与约東变量 匹配合一 两个谓词可匹配合一,是指两个谓词的名相同, 参量项的个数相同,参量类型对应相同,并且对应 参量项还满足下列条件之一: (1)如果两个都是常量,则必须完全相同。蕌 (2)如果两个都是约束变量,则两个约束值必 须相同。蕌 (3)如果其中一个是常量,一个是约束变量, 则约束值与常量必须相同。 蕌(4)至少有一个是自由变量
考虑下面的各组谓词是否可匹配合一?蕌 pre("obl","ob2”,Z)蕌 prel("obl″,"ob3″,Y)潼 prel("obl","ob2″,z)蕌 pre("ob1"”,X,"ob3") pre("obl"”,"ob2”,Z)蕌 prel(obl",X,Y)
3.回溯蕌 所谓回溯,就是在程序运行期间,当某一个子 目标不能满足(即谓词匹配失败)时,控制就返回到 前一个已经满足的子目标(如果存在的话),并撤消 其有关变量的约束值,然后再使其重新满足。成 功后,再继续满足原子目标。如果失败的子目标前 再无子目标,则控制就返回到该子目标的上一级目 标(即该子目标谓词所在规则的头部)使它重新匹配。 回溯也是 PROLOG的一个重要机制
likes(bell, sports).HE likes(mary, music), Ax u likes(mary, sports).HE likes(jane, smith) friend (john, X): -likes(X, reading), likes(X, music friend(john, X): -likes(X, sports), likes(X, music ?-friend (john, Y) 则求解目标为 friend(john, Y 新目标蕌 likes(X, reading), likes(X, music).ti