1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
segment(paris,lyon,peniche,200).
segment(paris,lyon,train,200).
segment(lyon,marseille,train,750).
segment(lyon,marseille,peniche,100).
segment(paris,marseille,avion,900).
directconnectionby(D,A,X,L) :- segment(D,A,X,L).
directconnectionby(D,A,X) :- segment(D,A,X,_).
directconnection(D,A) :- segment(D,A,_,_).
connectionby(D,A,X) :- directconnectionby(D,A,X).
connectionby(D,A,X) :- directconnectionby(B,A,X), connectionby(D,B,X).
dconnectionby(D,A,X,L) :- directconnectionby(D,A,X,L).
dconnectionby(D,A,X,L) :- directconnectionby(B,A,X,L1), dconnectionby(D,B,X,L2), L is L1 + L2.
sconnectionby(D,A,X,0) :- directconnectionby(D,A,X).
sconnectionby(D,A,X,L) :- directconnectionby(B,A,X), sconnectionby(D,B,X,L1), L is L1 + 1.
anyconnection(D,A) :- directconnection(D,A).
anyconnection(D,A) :- anyconnection(D,B), directconnection(B,A).
hasotherconnectionby(D,A,X) :- segment(D,A,Y,_), \+ (Y == X), !.
otherconnectionby(D,A,X,Y) :- connectionby(D,A,Y), \+ (Y == X).
otherdconnectionby(D,A,X,Y) :- directconnectionby(D,A,Y), \+ (Y == X).
onlyconnectionby(D,A,X) :- connectionby(D,A,X), \+ (hasotherconnectionby(D,A,X)).
allconnection(D,A,L) :- findall(X, connectionby(D,A,X), L).
alldirectconnection(D,A,L) :- findall(X, directconnectionby(D,A,X), L).
allotherconnection(D,A,M,L) :- findall(X, otherconnectionby(D,A,M,X), L).
allotherdconnection(D,A,M,L) :- findall(X, otherdconnectionby(D,A,M,X), L). |
Partager