Prólogo. Construir un cierre transitivo de un gráfico
Nov 30 2020
Soy muy nuevo en Prolog. Tengo un gráfico de este tipo:
edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).
Defino un cierre transitivo como:
p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).
Necesito construir un cierre transitivo de un gráfico. Por favor, avíseme cómo proceder.
Respuestas
2 WillemVanOnsem Nov 30 2020 at 00:58
El problema trans/2
es que solo caminará dos bordes, no un número arbitrario.
Podemos definir un predicado tran(X, Z)
que se mantenga si se edge(X, Z)
cumple, o edge(X, Y)
y luego tran(Y, Z)
. Por lo tanto, en este último seguimos un borde y luego recurrimos a tran/2
:
tran(X, Z) :-
edge(X, Z).
tran(X, Z) :-
edge(X, Y),
tran(Y, Z).