7. Обратите список
Domains
intlist = integer*
Predicates
reverse(intlist, intlist)
Clauses
reverse([], []).
reverse([X|L1], L2):- reverse(L1,L3), append(L3,[X],L2).
Goal
reverse([1,2,3,4],L).
8. Удалите все отрицательные элементы из списка
Domains
intlist = integer*
Predicates
filtr(intlist, intlist)
Clauses
filtr([],[]).
filtr ([H|T], [H|L]):- H>=0, filtr (T, L).
filtr ([H|T], L):- H<0, filtr (T, L).
Goal
filtr([-3,4,-1,2,5],L).
9. Удвойте вхождение каждого элемента списка
Domains
intlist = integer*
Predicates
twice(intlist, intlist)
Clauses
twice([],[]).
twice ([H|T],[H,H|L]):- twice (T, L).
Goal
twice([1,2,3,4],L).
10. Определите максимальный элемент списка
Domains
intlist = integer*
Predicates
max(integer,integer,integer)
maxlist(intlist, integer)
Clauses
max(X,Y,X):- X>=Y.
max(X,Y,Y):- X<Y.
maxlist([X],X).
maxlist([X|T],MAX):-maxlist(T,MAXT), max(X,MAXT,MAX).
Goal
maxlist([3,4,9,2,-5]).
11. Удалите предпоследний элемент списка
Domains
intlist = integer*
Predicates
delprpos(intlist, intlist)
Clauses
delprpos ([_,P], [P]).
delprpos ([H|T],[H|L]):- delprpos (T,L).
Goal
delprpos([1,2,3,4],L).
12. Удалите все вхождения заданного значения из списка
Domains
intlist = integer*
Predicates
delete(integer, intlist, intlist)
Clauses
delete(_,[],[]).
delete(X,[X|L],L1):- delete(X,L,L1).
delete(X,[Y|L],[Y|L1]):-X<>Y,delete(X,L,L1).
Goal
delete(1,[1,2,3,1,3],L).
13. Разделите исходный список на два подсписка. В первый из них должны попасть элементы с нечетными номерами, во второй – элементы с четными номерами
Domains
intlist = integer*
Predicates
sort(intlist, intlist, intlist)
Clauses
sort([],[],[]).
sort([X],[X],[]).
sort ([X,Y|L],[X|L1],[Y|L2]) :- sort (L,L1,L2).
Goal
sort([-1,-2,3,-4,5],L1,L2).
14. Проверьте, что все элементы списка положительны
Domains
intlist = integer*
Predicates
test(intlist)
Clauses
test([]).
test([H|T]):-H>0,test(T).
Goal
test([3,4,1,2,5]).







