Ошибка PyDatalog - переупорядочивание фактов в функции загрузки приводит к зависанию программы - PullRequest
0 голосов
/ 20 декабря 2018

Рассмотрим следующий код:

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)

Что вы думаете?это ошибка?

...