Prolog 中的变量

2024 年 8 月 29 日 | 阅读 3 分钟

变量可以在子句的头部或主体中使用。变量也可以在目标中使用,这些目标是在系统提示符处输入的。

目标中的变量

在目标中,变量可以被解释为“查找使目标满足的变量值”。

例如

上面的目标可以解读为“查找 X 的值,使 large_animal(X) 满足”。

以下示例,动物程序 3 显示了动物程序的第三个版本。此示例与 动物程序 2 相同,但它有一些额外的规则,如下所示

以下显示了一个目标

上述目标描述了为了满足 chases(A, B),找到 A 和 B 的值。

为了满足上述目标,Prolog 将搜索所有子句,直到找到匹配的子句。对子句的搜索将从上到下进行。在该子句的主体中,它将逐个处理目标,它将从左到右工作,并尝试依次满足每一个目标。

以下示例显示了在提示符处输入的一些典型目标以及动物程序 3 的输出。

我们无法通过回溯来阻止生成相同答案多次。

例如

使用回溯,查询 ?-chases(dane, A) 会在三个答案中产生两个相同的答案。

变量的词法作用域

以下子句显示:

在上面的子句中,A 和 B 变量的出现可以一致地替换为任何其他变量,例如 First_person 和 Second_person。

以上操作不会更改用户的程序或子句的含义。

全称量化变量

在事实或规则中,如果出现一个变量,则表示该事实或规则适用于所有可能的变量值。

例如

存在量化变量

假设数据库包含各种子句

上面的例子有六个子句。这些子句定义了 person/5 谓词的定义。它有 5 个参数,具有明显的解释,例如人的名字、姓氏、性别、年龄和职业。

规则由最后一个子句定义。 它有一个谓词“person”。 这些规则意味着“对于所有 X,如果 A 是人,并且 X 是性别为男性的某人,则 X 是人。”在子句的头部,变量 X 代表“对于所有 X”,它被称为全称量化