1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
connection(D,A,X,_):-segment(D,A,X,_).
connection(D,A,X,_):-segment(D,A1,X,_),connection(A1,A,X,_).
% 3.2 prédicat description(D,A,L) qui vérifie qu'on peut aller de la ville D à la ville A en passant par les villes
% se trouvant dans la liste L lue de gauche à droite. On vérifiera que D est la première ville de L et A
% la dernière ville de L.
% renverse(L,Lrev) pour la 2ème règle on vide la 1ère liste dans la 3ème
inverse([],L,L).
inverse([X|L],L2,L3):-inverse(L,L2,[X|L3]).
renverse(L,L2):-inverse(L,L2,[]).
der_vil(L,[A|L2]):-renverse(L,[A|L2]). % soit L2 liste inversée de L donc cette règle me donne le premier élément de L2(A) donc le dernier de L
description(D,A,[D|L]):-segment(D,A,X,_),der_vil(L,[A|L2]),!.
description(D,A,[D,A1|L]):-segment(D,A1,X,_),connection(A1,A,X,_),der_vil(L,[A|L2]),!.
description(D,A,[D,A1,_|L]):-segment(D,A1,X,_),(connection(A1,_,X,_),segment(A1,_,X,_);segment(A1,A,X,_)),der_vil(L,[A|L2]),!. |
Partager