考虑以下代码:
from pyDatalog import pyDatalog
from pyDatalog.pyDatalog import assert_fact, load, ask, clear
assert_fact('A', 'f', 'b')
assert_fact('B', 'a', 'f')
load("""
C(A,B) <= B(A,F) & A(F,B)
C(A,B) <= D(B,A) & E(B,A)
D(A,B) <= E(E,B) & A(E,A)
D(A,B) <= E(A,B) & C(B,A)
E(A,B) <= A(F,A) & B(B,F)
E(A,B) <= A(A,F) & D(F,B)
E(A,B) <= E(E,B) & A(E,A)
""")
print(ask('C(a,b)'))
程序挂在ask命令上,但是如果我们切换前两个子句的顺序,它将起作用,即代替:
C(A,B) <= B(A,F) & A(F,B)
C(A,B) <= D(B,A) & E(B,A)
使用:
C(A,B) <= D(B,A) & E(B,A)
C(A,B) <= B(A,F) & A(F,B)
您怎么看?这是一个错误吗?