プロローグ。グラフの推移閉包を作成します
Nov 30 2020
私はPrologにとても慣れていません。私はそのようなグラフを持っています:
edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).
推移閉包を次のように定義します。
p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).
グラフの推移閉包を作成する必要があります。進め方を教えてください。
回答
2 WillemVanOnsem Nov 30 2020 at 00:58
の問題は、任意の数ではなく、2つのエッジtrans/2
のみを歩くことです。
tran(X, Z)
保持する場合edge(X, Z)
は保持する述語、またはedge(X, Y)
を定義できますtran(Y, Z)
。したがって、後者では、一方のエッジをたどってから、次のように繰り返しますtran/2
。
tran(X, Z) :-
edge(X, Z).
tran(X, Z) :-
edge(X, Y),
tran(Y, Z).