Задача – премахване на последните нечетни елементи на Prolog


Предикат p(I,L1,L2) на Пролог, който по дадено естествено число I и списък от числа L1, връща в L2, списък получен от L1, след премахване на всички нечетни числа след последните I елемента на L1.
Или ако I = 3, L1 = [1,2,3,4,5], L2 трябва да върне [1,2,4].

p(I,L1,L2):-reverse(L1,L3),delete(I,L3,L4),reverse(L4,L2).
reverse([],[]).
reverse([X|L1],L2):-reverse(L1,L3),append(L3,[X],L2).
append([],L,L).
append([X|L1],L2,[X|L3]):-append(L1,L2,L3).
delete(0,L,L).
delete(I,[X|L],[X|L2]):- I>0, X mod 2 =:= 0,I1 is I-1, delete(I1,L,L2).
delete(I,[X|L],L2):- I>0, X mod 2 =:= 1, I1 is I-1, delete(I1,L,L2).
?- p(3,[1,2,3,4,5,6,7,8,9,10],X),write(X),nl.
% X = [1,2,3,4,5,6,7,8,10]
  1. Няма коментари.
(will not be published)