0

考虑以下关系:edge(X,Y)、Red(X,Y)、Blue(X,Y)。这些关系表示一个图,其边缘可以被着色为红色或蓝色(或无颜色)。

为以下查询提供安全的数据记录规则(必要时使用否定)。

Q1。找到从 X 到 Y 的路径(链接边序列)的节点 X 和 Y 对?

我的尝试:- 可达(X,Y):- 边缘(X,Y)

可达(X,Y):- 边缘(X,Z),可达(Z,Y)

Q2。找到节点 X 和 Y 对,其中存在从 X 到 Y 的均匀长度的路径(一系列连接的边),红色和蓝色交替出现?

我的尝试:

我制作了奇偶数据记录程序和一个红/蓝程序,但不知道如何将两者结合起来以获得偶数长度的交替红/蓝节点

奇数(x,y):- 边缘(x,y)

奇数(x,y):- 边缘(x,z),偶数(z,y)
偶数(x,y):- 边缘(x,z),奇数(z,y)。

路径(X,Y):- 红色(X,Y)

路径(X,Y):- 路径(X,Z),蓝色(Z,W),路径(W,Y)

4

1 回答 1

1

从您的问题中,我得到的印象是您正在尝试回答这些作业而不测试您的潜在解决方案。这是一种非常困难的工作方式。我强烈建议做一些小例子来测试您的解决方案是否正确并在 Datalog 引擎中运行它(最简单的是在线的东西,如http://www.iris-reasoner.org/demohttps://developer.logicblox。 com/游乐场/)。

在这种特殊情况下,很容易看出,如果您有一条边(“a”,b”),边(“b”,c”)和边(“c”,“d”),那么您的解决方案将找不到从“a”到“d”的路径。

这个查询只能用递归来解决。这个路径查询是非常基本的递归,搜索祖先或传递闭包。

于 2016-09-28T05:21:15.457 回答