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