Prolog. Buat penutupan transitif dari grafik

Nov 30 2020

Saya sangat baru di Prolog. Saya memiliki grafik seperti itu:

edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).

Saya mendefinisikan penutupan transitif sebagai:

p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).

Saya perlu membuat penutupan transitif dari grafik. Beri tahu saya cara melanjutkannya.

Jawaban

2 WillemVanOnsem Nov 30 2020 at 00:58

Masalahnya trans/2adalah bahwa ia hanya akan berjalan dua sisi, bukan nomor yang berubah-ubah.

Kita bisa mendefinisikan predikat tran(X, Z)yang memegang jika edge(X, Z)ditahan, atau edge(X, Y)lalu tran(Y, Z). Dengan demikian, kami mengikuti satu sisi dan kemudian kembali lagi tran/2:

tran(X, Z) :-
    edge(X, Z).
tran(X, Z) :-
    edge(X, Y),
    tran(Y, Z).