Рассмотрим следующий код:
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)
Что вы думаете?это ошибка?