Списки в Прологе – 5

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]).

Похожие записи

Добавить комментарий