向后链接与变量

时间:2015-06-08 05:15:10

标签: prolog logic datalog

我一直在阅读Prolog / Datalog中的推理,虽然正向链接似乎相当容易掌握,但我有一些问题与任何复杂的例子进行反向链接,这不是简单的命题或用于确定真值或假值。我正在读一篇文章,给出了以下例子:

utf8_bin

假设我们要查询sg(X,X) sg(X,Y) :- par(X, X1), par(Y,Y1), sg(X1,Y1) ,其中sg(a,W)是常量,a是变量。这可以理解为:

  

给我所有与W同代的人。

本文首先声明这些特定规则将导致Prolog / Datalog中的无限循环,但可以通过将第二个规则更改为:

来修复
a

为什么原始结果会循环?其次,这种查询的执行会是什么样的?值何时绑定到这些变量?

1 个答案:

答案 0 :(得分:1)

这篇文章似乎不是很明确。假设呼叫是“sg(a,W)”。让分析第一种可能性:

sg(X,Y) :- par(X, X1), par(Y,Y1), sg(X1,Y1)

第一个“par”将被查询为“par(X = a,X1)”,其次为“par(Y = W,Y1)”。最后一个查询是完全未绑定的查询,可能是本文试图跳过的内容。

现在,第二种可能性:

 sg(X,Y) :- par(X, X1),  sg(X1,Y1), par(Y,Y1). 

执行为par(X = a,X1),sg(X1 / *在前一个 /,Y1中绑定),par(Y = W,Y1 / 在前一个* /中绑定)。如您所见,在所有查询中,至少有一个参数先前已被绑定。