Recursion 递归数据日志的执行顺序是什么?

Recursion 递归数据日志的执行顺序是什么?,recursion,datalog,Recursion,Datalog,此代码的功能是搜索所有可访问的节点对。这是如何递归的 这是递归的,因为谓词调用自身: Q(a, b) :- Edge(a, b). Q(a, b) :- Q(a, x), Edge(x, b). 实际执行顺序取决于实现。可能是“自下而上”: 从任何边(A,B)派生q(A,B) 应用q(A,B):-q(A,X),边(X,B)。直到达到一个固定点(即不能进一步q(A,B)) 不过,您应该能够重新排列代码,而不会产生非终止搜索的风险,这与Prolog不同 这也应该起作用:

此代码的功能是搜索所有可访问的节点对。这是如何递归的

这是递归的,因为谓词调用自身:

Q(a, b) :- Edge(a, b).
Q(a, b) :- Q(a, x),
            Edge(x, b).
实际执行顺序取决于实现。可能是“自下而上”:

  • 从任何
    边(A,B)
    派生
    q(A,B)
  • 应用
    q(A,B):-q(A,X),边(X,B)。
    直到达到一个固定点(即不能进一步
    q(A,B)
不过,您应该能够重新排列代码,而不会产生非终止搜索的风险,这与Prolog不同

这也应该起作用:

q(A, B) :- q(A, X),edge(X, B).

这是一些奇怪的数据日志-谓词名称是大写的,变量名称是小写的。这怎么可能?
q(A, B) :- q(A, X),edge(X, B).
q(A, B) :- edge(A, B).