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/2ist, 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).