
Подборка лаб выполненых в Arity Prologе / ARI_DOC / LABA_1
.DOC
-
Программа о древе славного рода : Само древо :
woman('Феня').
woman('Зина').
woman('Люда').
woman('Ира').
woman('Нина').
woman('Аня').
woman('Таня').
woman('Юля').
woman('Маня').
woman('Марина').
man('Игнат').
man('Вася').
man('Миша').
man('Петр').
man('Коля').
man('Володя').
man('Павел').
man('Саша').
man('Леха').
mother('Зина','Коля').
father('Вася','Коля').
mother('Зина','Петр').
father('Вася','Петр').
mother('Зина','Люда').
father('Вася','Люда').
mother('Феня','Миша').
father('Игнат','Миша').
mother('Феня','Маня').
father('Игнат','Маня').
mother('Маня','Павел').
father('Володя','Павел').
mother('Маня','Юля').
father('Володя','Юля').
mother('Маня','Таня').
father('Володя','Таня').
mother('Люда','Саша').
father('Миша','Саша').
mother('Люда','Аня').
father('Миша','Аня').
mother('Ира','Марина').
father('Петр','Марина').
mother('Нина','Леха').
father('Коля','Леха').
husband('Игнат','Феня').
husband('Володя','Маня').
husband('Миша','Люда').
husband('Вася','Зина').
husband('Петр','Ира').
husband('Коля','Нина').
wife(Whose,Who):-husband(Who,Whose).
parents(Who,Whose):-mother(Who,Whose).
parents(Who,Whose):-father(Who,Whose).
child(Who,Whose):-parents(Whose,Who).
brother(Who,Whose):-man(Who),father(Rod,Who),
father(Rod,Whose),Who\=Whose.
sister(Who,Whose):-woman(Who),mother(Rod,Who),
mother(Rod,Whose),Who\=Whose.
uncle(Who,Whose):-parents(Par,Whose),brother(Who,Par).
uncle(Who,Whose):-parents(Par,Whose),sister(N,Par),husband(Who,N).
aunt(Who,Whose):-parents(Par,Whose),sister(Who,Par).
aunt(Who,Whose):-parents(Par,Whose),brother(P1,Par),wife(Who,P1).
grandmother(Who,Whose):-woman(Who),parents(Par,Whose),
mother(Who,Par).
grandfather(Who,Whose):-man(Who),parents(Par,Whose),
father(Who,Par).
cousina(Who,Whose):-woman(Who),aunt(Who1,Whose),
mother(Who1,Who),Who\=Whose.
cousin(Who,Whose):-man(Who),uncle(Who1,Whose),
father(Who1,Who),Who\=Whose.
plem_a(Who,Whose):-woman(Who),
parents(Par,Who),
sister(Par,Whose).
plem_a(Who,Whose):-woman(Who),
parents(Par,Who),
brother(Br,Par),
wife(Whose,Br).
plem_a(Who,Whose):-woman(Who),
parents(Par,Who),
sister(Ss,Par),
husband(Whose,Ss).
plem_a(Who,Whose):-woman(Who),
parents(Par,Who),
brother(Par,Whose).
plem_k(Who,Whose):-man(Who),
parents(Par,Who),
sister(Par,Whose).
plem_k(Who,Whose):-man(Who),
parents(Par,Who),
brother(Br,Par),
wife(Whose,Br).
plem_k(Who,Whose):-man(Who),
parents(Par,Who),
sister(Ss,Par),
husband(Whose,Ss).
plem_k(Who,Whose):-man(Who),
parents(Par,Who),
brother(Par,Whose).
Тестовые примерчики :
?- sister('Таня',W).
W = 'Павел' ->;
W = 'Юля' ->;
no
?- grandmother(X,'Саша').
X = 'Феня' ->;
X = 'Зина' ->;
no
?- grandfather('Вася',X).
X = 'Саша' ->;
X = 'Аня' ->;
X = 'Марина' ->;
X = 'Леха' ->;
no
?- cousina(X,'Саша').
X = 'Таня' ->;
X = 'Юля' ->;
X = 'Марина' ->;
no
?- plem_a('Марина',X).
X = 'Нина' ->;
X = 'Миша' ->;
X = 'Коля' ->;
X = 'Люда' ->;
no
-
Программа о дорогах : Сами дороги :
way('Vyborg','Peterburg',160).
way('Peterburg','Moscow',600).
way('Peterburg','Novgorod',170).
way('Novgorod','Moscow',490).
way('Peterburg','Novosibirsk',2560).
way('Peterburg','Kiev',1060).
way('Kiev','Omsk',2600).
way('Moscow','Omsk',1900).
way('Novosibirsk','Omsk',350).
way('Omsk','Krasnoyrsk',900).
way('Krasnoyrsk','Vladivostok',3700).
way1(X,Y,Dist):-way(X,Y,Dist).
way1(X,Y,Dist):-way(Y,X,Dist).
element(Z,[Z|_]).
element(Z,[_|X]):-element(Z,X).
print([]):-!.
print([X|Tail]):-
print(Tail),
write(X),
write('-').
path(Town1,Town2,Dist,Were):-
way1(Town1,Town2,Dist),
not(element(Town2,Were)),
print(Were),
write(Town2).
path(Town1,Town2,Dist,Were):-
way1(Town1,X,Dist1),
not(element(X,Were)),
path(X,Town2,Dist2,[X|Were]),
Dist is Dist1+Dist2.
go(Town1,Town2,Dist):-
path(Town1,Town2,Dist,[Town1]).
min(Town1,Town2,Dist1):-
path(Town1,Town2,Dist,[Town1]),
Dist<Dist1.
gomin(Town1,Town2,Dist1,M):-
path(Town1,Town2,Dist,Were),
Dist < Dist1,
Dist11 is Dist1,
path(Town1,Town2,Dist11,M).
gomin(Town1,Town2,Dist1,M):-
not(min(Town1,Town2,Dist1)),
M is Dist1.
road(Town1,Town2):-
gomin(Town1,Town2,100000,M).
Тестовые примерчики :
?- go('Vyborg','Vladivostok',D).
Vyborg-Peterburg-Moscow-Omsk-Krasnoyrsk-Vladivostok
D = 7260 ->;
Vyborg-Peterburg-Novgorod-Moscow-Omsk-Krasnoyrsk-Vladivostok
D = 7320 ->;
Vyborg-Peterburg-Novosibirsk-Omsk-Krasnoyrsk-Vladivostok
D = 7670 ->;
Vyborg-Peterburg-Kiev-Omsk-Krasnoyrsk-Vladivostok
D = 8420 ->;
no
?- road('Vyborg','Vladivostok').
Vyborg-Peterburg-Moscow-Omsk-Krasnoyrsk-Vladivostok
?- road('Vyborg','Vladivostok').
Vyborg-Peterburg-Moscow-Omsk-Krasnoyrsk-Vladivostok
no
?- go('Peterburg','Moscow',Dist).
Peterburg-Moscow
Dist = 600 ->;
Peterburg-Novgorod-Moscow
Dist = 660 ->;
Peterburg-Novosibirsk-Omsk-Moscow
Dist = 4810 ->;
Peterburg-Kiev-Omsk-Moscow
Dist = 5560 ->;
no
-
Программа о действиях над списком :
element(Z,[Z|_]).
element(Z,[_|X]):-element(Z,X).
add(Z,X,[Z|X]).
addlast(Z,[],[Z]).
addlast(Z,[A|X],[A|R]):-addlast(Z,X,R).
reverse([],[]).
reverse([A|X],R):-reverse(X,Y),addlast(A,Y,R).
cmp([],[]).
cmp([A|X],[B|Y]):-A=B,cmp(X,Y).
prefix([],X).
prefix([A|X],[B|Y]):-A=B,prefix(X,Y).
near(A,B,X):-prefix([A,B],X).
near(A,B,X):-prefix([B,A],X).
near(A,B,[_|X]):-near(A,B,X).
del_elem(A,[A|X],X).
del_elem(A,[B|X],[B|R]):-del_elem(A,X,R).
del_all_elem(A,[X|R],Y):-
del_all_elem(A,R,Y).
del_all_elem(A,[X|R],[X|Y]):-
X\=A,
del_all_elem(A,R,Y).
del_all_elem(A,[],[]).
Тестовые примерчики :
?- add(a,[b,c,d],S). Добавление нового элемента в начало
S = [a,b,c,d] ->;
no
?- addlast(ss,[b,c,d],S). Добавление нового элемента в конец
S = [b,c,d,ss] ->;
no
?- reverse([a,b,c,d],SR). Список – наоборот
SR = [d,c,b,a] ->;
no
?- cmp([a,b,c],[a,b,c]). Сравнение двух списков
yes
?- cmp([a,b,c],[a,b,c,d]).
no
?- near(c,d,[a,b,c,d,f]). Два элемента рядом
yes
?- del_all_elem(a,[b,a,c,a],S). Удаление всех вхождений элемента из списка
S = [] ->;
S = [c] ->;
S = [b] ->;
S = [b,c] ->;
no