第2章逻辑程序设计语言 例如:下面的两个谓词 prel(obl",ob2", Z) prel(obl"X,Y 只有当变量X被约束为'ob2,且Y、Z的约束值相同或者至 少有一个是自由变量时,它们才是匹配合一的
第 2 章 逻辑程序设计语言 例如: pre1(″ob1″ , ″ob2″,Z) pre1(″ob1″,X,Y) 只有当变量X被约束为″ob2″ , 且Y、 Z的约束值相同或者至 少有一个是自由变量时, 它们才是匹配合一的
第2章逻辑程序设计语言 可见 PROLOG的匹配合一,与归结原理中的合一的意思基 本一样。但这里的合一同时也是一种操作。这种操作可使两 个能匹配的谓词合一起来,即为参加匹配的自由变量和常量, 或者两个自由变量建立一种对应关系,使得常量作为对应变量 的约束值,使得两个对应的自由变量始终保持一致,即若其中 个被某值约束,则另一个也被同一值约東;反之,若其中 个的值被解除,则另一个的值也被解除。合一操作是 PROLOG 的一个特有机制
第 2 章 逻辑程序设计语言 可见PROLOG的匹配合一, 与归结原理中的合一的意思基 本一样。但这里的合一同时也是一种操作。 这种操作可使两 个能匹配的谓词合一起来, 即为参加匹配的自由变量和常量, 或者两个自由变量建立一种对应关系, 使得常量作为对应变量 的约束值, 使得两个对应的自由变量始终保持一致, 即若其中 一个被某值约束, 则另一个也被同一值约束;反之, 若其中一 个的值被解除, 则另一个的值也被解除。合一操作是PROLOG 的一个特有机制
第2章逻辑程序设计语言 3.回溯 所谓回溯,就是在程序运行期间,当某一个子目标不能满足 (即谓词匹配失败)时控制就返回到前一个已经满足的子目标(如 果存在的话)并撤消其有关变量的约束值,然后再使其重新满足。 成功后,再继续满足原子目标。如果失败的子目标前再无子目 标,则控制就返回到该子目标的上一级目标(即该子目标谓词所 在规则的头部)使它重新匹配。回溯也是 PROLOG的一个重要机
第 2 章 逻辑程序设计语言 3. 所谓回溯, 就是在程序运行期间, 当某一个子目标不能满足 (即谓词匹配失败)时,控制就返回到前一个已经满足的子目标(如 果存在的话), 并撤消其有关变量的约束值, 然后再使其重新满足。 成功后, 再继续满足原子目标。如果失败的子目标前再无子目 标, 则控制就返回到该子目标的上一级目标(即该子目标谓词所 在规则的头部)使它重新匹配。回溯也是PROLOG的一个重要机 制
第2章逻辑程序设计语言 下面,我们介绍 PROLOG程序的运行过程。我们仍以上面 的程序为例。设所给的询问是 ?- friendgjohn,Y).(john和谁是朋友?) 则求解目标为 friendgjohn,Y) 这时,系统对程序进行扫描,寻找能与目标谓词匹配合一的事 实或规则头部。显然,程序中前面的四条事实均不能与目标匹 配,而第五个语句的左端即规则 friendgjohn, X): - likes(X, reading), likes(X, music)
第 2 章 逻辑程序设计语言 下面, 我们介绍PROLOG程序的运行过程。 我们仍以上面 的程序为例。 ?-friend(john,Y). (john和谁是朋友?) friend(john,Y). 这时, 系统对程序进行扫描, 寻找能与目标谓词匹配合一的事 实或规则头部。显然, 程序中前面的四条事实均不能与目标匹 配, friend(john,X):-likes(X,reading),likes(X,music)
第2章逻辑程序设计语言 的头部可与目标谓词匹配合一。但由于这个语句又是一个规则, 所以其结论要成立则必须其前提全部成立。于是,对原目标的求 解就转化为对新目标 likes(X, reading),likes(X, music) 的求解。这实际是经归结,规则头部被消去,而目标子句变为 ?-likes(X, reading), likes(X, music) 现在依次对子目标 likes(X, reading) FHlikes(X, music) 求解
第 2 章 逻辑程序设计语言 的头部可与目标谓词匹配合一。但由于这个语句又是一个规则, 所以其结论要成立则必须其前提全部成立。于是,对原目标的求 likes(X,reading),likes(X,music). 的求解。 这实际是经归结, 规则头部被消去, ?-likes(X,reading),likes(X,music). likes(X,reading)和likes(X,music) 求解