Prolog. Konstruieren Sie einen transitiven Abschluss eines Graphen
Nov 30 2020
Ich bin sehr neu in Prolog. Ich habe so eine Grafik:
edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).
Ich definiere einen transitiven Verschluss als:
p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).
Ich muss einen transitiven Abschluss eines Graphen erstellen. Bitte lassen Sie mich wissen, wie es weitergehen soll.
Antworten
2 WillemVanOnsem Nov 30 2020 at 00:58
Das Problem dabei trans/2
ist, dass es nur zwei Kanten geht, keine willkürliche Zahl.
Wir können ein Prädikat definieren tran(X, Z)
, das gilt, wenn es edge(X, Z)
gilt, und edge(X, Y)
und dann tran(Y, Z)
. Wir folgen also in letzterem einer Kante und rekursieren dann weiter tran/2
:
tran(X, Z) :-
edge(X, Z).
tran(X, Z) :-
edge(X, Y),
tran(Y, Z).