PyDatalog:跟踪递归深度

问题描述

我无法在 PyDatalog 中跟踪循环中的递归深度。我有一个节点和边连接它们的图。例如,我的 PyDatalog 程序中有 3 个节点的图:

pyDatalog.load("""+ connected("A","B")
+ connected("B","C")
+ connected("C","A")""")

我基本上想计算这个图的每个节点到另一个节点(传递闭包)的每个连接WITH对应的递归深度。我的 Datalog 程序在没有计算递归深度的情况下工作正常(路径的长度实际上应该是递归深度):

pyDatalog.create_terms('connected,X,Y,Z,D')
pyDatalog.load("""connected(X,Y) <= connected(X,Z) & connected(Z,Y)""")

这给了我以下结果:

X | Y
--|--
A | A
A | C
A | B
B | B
B | A
B | C
C | C
C | B
C | A

这正是我想要的结果。我已经尝试计算递归深度并且它没有循环就可以正常工作(例如,如果我省略了 connected("C","A") 事实):

pyDatalog.load("""+ connected("A","C")
connected(X,1) <= connected(X,Y)
connected(X,D) <= connected(X,D1) & connected(Z,D1) & (D==D1+1)""")

它给了我以下结果:

X | Y | D
--|---|--
A | B | 1
B | C | 1
A | C | 2

一旦我添加一个圆,它就不再起作用了...我已经尝试应用一些圆检查或跟踪从一个节点到另一个节点的路径并将长度用作递归深度(类似于这篇文章:{{ 3}}) 但我无法让它工作......

我想要的输出是:

X | Y | D
--|-- |--
A | A | 3
A | C | 2
A | B | 1
B | B | 3
B | A | 2
B | C | 1
C | C | 3
C | B | 2
C | A | 1

如果有人能帮助我,我会很高兴:D

谢谢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...