PyDatalog では、次のアサーションを定義しました。
#stations
assert_fact('station', 'A' ,'yellow')
assert_fact('station', 'B' ,'yellow')
assert_fact('station', 'C' ,'yellow')
assert_fact('station', 'D' ,'yellow')
#sections
assert_fact('stretch', 'A' ,'B')
assert_fact('stretch', 'B' ,'C')
assert_fact('stretch', 'C', 'D')
そして、A から D に到達する方法があるかどうかをデータベースに問い合わせたいと思います。次のコードは、方法がある場合は set([()]) に応答し、ない場合は None に応答するため、機能するはずです。しかし、Zのさまざまな評価の結果は得られません。たとえば、ABCDなどのルートも知りたいです。
load("""
route(X,Y) <= stretch(X,Y)
route(X,Y) <= stretch(X,Z) & route(Z,Y)
""")
バインドされていない値を試してみましたが、最初の反復の結果しか得られません。
load("""
route(X,Y,P) <= stretch(X,Y) & (P==Y)
route(X,Y,P) <= stretch(X,P) & route(P,Y,Z)
""")
問題は、最初の繰り返しで P しかかからないことだと思います。または、集計関数を使用する必要がありますか? concat の使い方がよくわかりません...
前もって感謝します。