Similar presentations:
Программирование алгоритмов
1.
голова [a,b,c] есть a, хвост [a,b,c] есть [b,c];голова [c] есть с, хвост [c] есть [].
[a,b,c] эквивалентно [a|b,c]
Список 1
[X, Y, Z]
[5]
[1, 2, 3, 4]
[1, 2]
Список 2
[один, два, три]
[X|Y]
[X, Y| Z]
[3|X]
Унификация
X=один, Y=два, Z=три
X=5, Y=[]
X=1, Y=2, Z=[3,4]
fail
2.
DOMAINSname = person(string, string)
ocenki = integer*
PREDICATES
student(name, ocenki)
CLAUSES
student(person("Воробьёва", "Галя"), [5, 5, 5, 5, 5, 5, 5]).
student(person("Галкина","Валя"), [5, 4, 5, 4, 4, 4, 5, 5]).
student(person("Волков","Олег"), [4, 3, 4, 5, 5, 3, 3, 4, 4, 4]).
student(person("Логинов","Матвей"), [3, 3, 3, 4, 4]).
student(person("Луговой","Максим"),[]).
GOAL
student(X,_).
3.
DOMAINSinteger_list = integer*
DOMAINS
elementlist = elements*
elements = integer; real; symbol
DOMAINS
elementlist = elements*
elements = i(integer); r(real); s(symbol)
4.
DOMAINSсписок = integer*
PREDICATES
длина_списка(список, byte)
CLAUSES
длина_списка([],0).
длина_списка([_|Хвост],Длина):длина_списка(Хвост,Длина1), Длина = Длина1 + 1.
GOAL
L = [9, 7, -3, 1, 0, -4, 5, 5, 2, 8, -6], длина_списка(L, Количество),
nl, write(Количество), nl.
5.
DOMAINSоценки = integer*
PREDICATES
ведомость(оценки)
CLAUSES
ведомость([]).
ведомость([Голова|Хвост]):writef("оценка: %s ", Голова), nl, ведомость(Хвост).
GOAL
write("Оценки студента Остапа Бендера"), nl,
Экзамены = [5,4,5,5,5,4,4,5,5], ведомость(Экзамены), nl.
6.
DOMAINSlist = integer*
PREDICATES
изменение_списка(list, list)
вывод(list)
CLAUSES
изменение_списка([], []).
изменение_списка([H|T], [H1|T1]):H mod 2 =0, H1 = H * H, изменение_списка(T, T1),!.
изменение_списка([H|T], [H|T1]):изменение_списка(T, T1).
вывод([]).
вывод([X|Y]):- write(X), nl, вывод(Y).
GOAL
L = [1, 2, 3, 4, 5, 6, 7, 8, 9],
изменение_списка(L, L1), вывод (L1), nl.
7.
DOMAINSlist = integer*
PREDICATES
изменение_списка(list, list)
вывод(list)
CLAUSES
изменение_списка([], []).
изменение_списка([_], []).
изменение_списка([_,H|Tail], [H|Tail1]):изменение_списка(Tail, Tail1),!.
вывод([]).
вывод([X|Y]):- write(X), nl, вывод(Y).
GOAL
L = [1, 2, 3, 4, 5, 6, 7, 8], изменение_списка(L, L1), вывод (L1), nl,
S = [1, 2, 3, 4, 5, 6, 7, 8, 9], изменение_списка(S, S1), вывод (S1), nl.
8.
findall(VarName, myPredicate, ListParam)DOMAINS
list = string*
PREDICATES
фонд(string,string,integer)
вывод(list)
CLAUSES
фонд("Лев Толстой","Война и мир",10). фонд("Лев Толстой","Анна Каренина",5).
фонд("Алексей Толстой","Волки и овцы",4). фонд("Михаил Лермонтов","Мцыри",4).
фонд("Александр Пушкин","Евгений Онегин",6).
фонд("Александр Пушкин","Дубровский",4). фонд("Николай Гоголь","Мертвые души",4).
фонд("Михаил Лермонтов","Герой нашего времени",6).
вывод([H|T]):-write(H),nl, вывод(T).
вывод([]).
GOAL
findall(Автор, фонд(Автор,_,_), S), write("Список авторов в фонде:"), nl,
вывод(S).
9.
принадлежит(element,spisok_elementov)DOMAINS
list = string*
PREDICATES
принадлежит (string, list)
CLAUSES
принадлежит (Имя, [Имя| _]).
принадлежит (Имя, [_|Хвост):- принадлежит (Имя, Хвост).
GOAL
findall(Автор, фонд(Автор,_,_), Spisok),
принадлежит("Михаил Лермонтов", Spisok).
10.
DOMAINSlist = string*
PREDICATES
фонд(string,string,integer)
вывод(list)
в_фонде(string,list)
удалить(list,list)
CLAUSES
фонд("Лев Толстой","Война и мир",10). фонд("Лев Толстой","Анна Каренина",5).
фонд("Алексей Толстой","Волки и овцы",4). фонд("Михаил Лермонтов", "Мцыри",4).
фонд("Александр Пушкин","Евгений Онегин",6).
фонд("Александр Пушкин","Дубровский",4). фонд("Николай Гоголь","Мертвые души",4).
фонд("Михаил Лермонтов", "Герой нашего времени",6).
в_фонде(H,[H|_]):-!.
в_фонде(H,[_|T]):- в_фонде(H,T).
удалить([],[]). удалить([H|T],[H|T1]):-not(в_фонде(H,T)), удалить(T,T1),!.
удалить([_|T],T1):- удалить(T,T1).
вывод([H|T]):-write(H), nl, вывод(T). вывод([]).
GOAL
findall(Автор, фонд(Автор, _, _), S), write("Список авторов в фонде:"), nl, nl,
вывод(S), удалить(S, S1), nl, write("Список авторов без повторов:"),
nl, nl, вывод(S1).
11.
append(List1,List2,List3)PREDICATES
доп_фонд(string, string, integer)
добавить(list, list, list)
CLAUSES
доп_фонд("Иван Гончаров", "Обломов",15).
доп_фонд("Иван Тургенев", "Рудин",10).
доп_фонд("Антон Чехов", "Вишневый сад",12).
добавить([], List2, List2).
добавить([H|T1], List2, [H|T3]):добавить(T1, List2, T3).
GOAL
findall(Автор, фонд(Автор,_,_),Spisok1),
findall(Автор, доп_фонд(Автор,_,_),Spisok2),
добавить(Spisok1, Spisok2, Svod), вывод(Svod).
12.
DOMAINSlist = integer*
PREDICATES
принадлежит(integer, list)
объединение(list, list, list)
CLAUSES
принадлежит(Name, [Name|_]).
принадлежит(Name, [_|Tail]):- принадлежит(Name, Tail).
объединение([], L, L).
объединение([X|T], List, [X|TU]):not(принадлежит(X, List)),!, объединение(T, List, TU).
объединение([_|T], L, TU):-!, объединение(T, L, TU).
GOAL
объединение([1, 2, 3, 4, 5], [4, 5, 6, 7], NewList).
13.
DOMAINSlist = integer*
PREDICATES
copy(list, integer, integer, list)
CLAUSES
copy([G|_], 1, 0, [G]):-!.
copy([G|H], 1, K, [G|HV]) :K1=K-1,!,copy(H, 1, K1, HV).
copy([_|H], N, K, S) :N1=N-1,!,copy(H, N1, K, S).
GOAL
copy([1, 2, 3, 4, 5, 6, 7, 8], 3, 4, Spisok).
14.
DOMAINSint=integer
list=int*
PREDICATES
perestanovka(list,list)
bubble(list,list)
CLAUSES
perestanovka([X,Y|T],[Y,X|T]):- X>Y,!.
perestanovka([X|T],[X|T1]):- perestanovka(T,T1).
bubble(L,L1):- perestanovka(L,LL), !,bubble(LL,L1).
bubble(L,L).
GOAL
bubble([12,2,-4,1,17,4,0,3,-17,5,3,7,6],List),nl.
LL=[2,12,-4,1,4,17,0,-17,3,3,5,6,7]
LL=[2,-4,12,1,4,0,17,-17,3,3,5,6,7]
LL=[-4,2,1,12,0,4,-17,17,3,3,5,6,7]
LL=[-4,1,2,0,12,-17,4,3,17,3,5,6,7]
LL=[-4,1,0,2,-17,12,3,4,3,17,5,6,7]
LL=[-4,0,1,-17,2,3,12,3,4,5,17,6,7]
LL=[-4,0,-17,1,2,3,3,12,4,5,6,17,7]
LL=[-4,-17,0,1,2,3,3,4,12,5,6,7,17]
LL=[-17,-4,0,1,2,3,3,4,5,12,6,7,17]
LL=[-17,-4,0,1,2,3,3,4,5,6,12,7,17]
LL=[-17,-4,0,1,2,3,3,4,5,6,7,12,17]