Prolog. Skonstruuj przechodnie zamknięcie wykresu
Nov 30 2020
Jestem nowy w Prologu. Mam taki wykres:
edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).
Domknięcie przechodnie definiuję jako:
p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).
Muszę skonstruować przechodnie zamknięcie wykresu. Daj mi znać, jak mam to zrobić.
Odpowiedzi
2 WillemVanOnsem Nov 30 2020 at 00:58
Problem trans/2
polega na tym, że przejdzie tylko dwie krawędzie, a nie dowolną liczbę.
Możemy zdefiniować predykat, tran(X, Z)
który zachowuje się, jeśli edge(X, Z)
jest zachowany, edge(X, Y)
a potem tran(Y, Z)
. Tak więc w tym ostatnim podążamy za jedną krawędzią, a następnie powtarzamy tran/2
:
tran(X, Z) :-
edge(X, Z).
tran(X, Z) :-
edge(X, Y),
tran(Y, Z).