Prolog. Construire une fermeture transitive d'un graphe
Nov 30 2020
Je suis très nouveau sur Prolog. J'ai un tel graphique:
edge(a,e).
edge(e,f).
edge(f,d).
edge(d,a).
Je définis une fermeture transitive comme:
p(X,Y) :- edge(X,Y).
tran(X,Z) :- p(X,Y), p(Y,Z).
J'ai besoin de construire une fermeture transitive d'un graphe. Veuillez me faire savoir comment procéder.
Réponses
2 WillemVanOnsem Nov 30 2020 at 00:58
Le problème avec trans/2
est qu'il ne parcourra que deux arêtes, pas un nombre arbitraire.
Nous pouvons définir un prédicat tran(X, Z)
qui tient si edge(X, Z)
tient, ou edge(X, Y)
et alors tran(Y, Z)
. On suit donc dans ce dernier un bord puis on revient sur tran/2
:
tran(X, Z) :-
edge(X, Z).
tran(X, Z) :-
edge(X, Y),
tran(Y, Z).