Подборка лаб выполненых в Arity Prologе / ARI_DOC / GORODA
.DOCПрограмма путешествия по городам, не заезжая в некоторые из них.
doroga('Vyborg','Peterburg',160).
doroga('Peterburg','Moscow',600).
doroga('Peterburg','Novgorod',170).
doroga('Novgorod','Moscow',490).
doroga('Peterburg','Novosibirsk',2560).
doroga('Peterburg','Kiev',1060).
doroga('Kiev','Omsk',2600).
doroga('Moscow','Omsk',1900).
doroga('Novosibirsk','Omsk',350).
doroga('Omsk','Krasnoyrsk',900).
doroga('Krasnoyrsk','Vladivostok',3700).
doroga1(X,Y,Dist):-doroga(X,Y,Dist).
doroga1(X,Y,Dist):-doroga(Y,X,Dist).
nenado([]).
prinadl(Z,[Z|_]).
prinadl(Z,[_|X]):-prinadl(Z,X).
pechat([]):-!.
pechat([X|Tail]):-
pechat(Tail),
write(X),
write('-').
puty(Gorod1,Gorod2,Dist,Byli,Nenado):-
doroga1(Gorod1,Gorod2,Dist),
not(prinadl(Gorod2,Byli)),
nl,pechat(Byli),
write(Gorod2).
puty(Gorod1,Gorod2,Dist,Byli,Nenado):-
doroga1(Gorod1,X,Dist1),
not(prinadl(X,Byli)),
not(prinadl(X,Nenado)),
puty(X,Gorod2,Dist2,[X|Byli],Nenado),
Dist is Dist1+Dist2.
go(Gorod1,Gorod2,Dist):-
nenado(Nenado),
puty(Gorod1,Gorod2,Dist,[Gorod1],Nenado).
Примеры :
-
nenado(['Novgorod','Kiev']).
?- go('Vyborg','Omsk',Dist).
Vyborg-Peterburg-Moscow-Omsk
Dist = 2660 ->;
Vyborg-Peterburg-Novosibirsk-Omsk
Dist = 3070 ->;
no
-
nenado( [ ] ).
?- go('Vyborg','Omsk',Dist).
Vyborg-Peterburg-Moscow-Omsk
Dist = 2660 ->;
Vyborg-Peterburg-Novgorod-Moscow-Omsk
Dist = 2720 ->;
Vyborg-Peterburg-Novosibirsk-Omsk
Dist = 3070 ->;
Vyborg-Peterburg-Kiev-Omsk
Dist = 3820 ->;
no