Примеры рекурсивных процедур работы со списками
_____________________________________________________ 1. n-ный элемент. nth_elem(<List>,<Number>,<Value_of_Element>). nth_elem([H|_],1,H). nth_elem([_|T],N,E):-N1 is N-1,nth_elem(T,N1,E). _____________________________________________________ 2. Максимальный элемент списка. max(<List>,<Value>). max([H],H). max([H|T],M):-max(T,M1),max2(H,M1,M) ..................................................... max2(X,Y,X):-X>Y. max2(X,Y,Y):-X=<Y. ______________________________________________________ 3. Обратить список. obr(<List>,<Obr_list>). obr([H],[H]). obr([H|T],L):-obr(T,L1),append(L1,[H],L). _____________________________________________________ 4. Выяснить, является ли переменная списком. list(<Value>). list([]). list([_|T]):-list(T). _____________________________________________________ 5. Выяснить, принадлежитли элемент списку. member(<Element>,<List>). member(H,[H|_]). member(H,[_|T]):-member(H,T). _____________________________________________________ 6. Найти длину списка. list_length(<List>,<Value_of_length>). list_length([],0). list_length([_|T],N):-list_length(T,NN),N is NN+1. _____________________________________________________ 7. Выяснить, является ли третий список склейкой первого и второго. append(<List1>,<List2>,<List1List2>). append([],L,L). append([H1|T1],L2,[H1|T3]):-append(T1,L2,T3). _____________________________________________________ 8. Найти последний элемент в списке. last(<Value_of_last_element>,<List>). last(H,[H]). last(H,[_|T]):-last(H,T).