0
мне удалось отменить список:Пролог: Удалить последний элемент списка
reverse([],Z,Z).
reverse([H|T],Z,A) :- reverse(T,Z,[H|A]).
и я хочу программу, которая удаляет последний элемент списка.
мне удалось отменить список:Пролог: Удалить последний элемент списка
reverse([],Z,Z).
reverse([H|T],Z,A) :- reverse(T,Z,[H|A]).
и я хочу программу, которая удаляет последний элемент списка.
Зачем вам что-то менять?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% remove_last(IN_LIST, OUT_LIST).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1. No last element to remove, fail - cut stops alternatives
remove_last([], []) :- !, fail.
% 2. Only one element in list - return empty list - cut stops alternatives
remove_last([_], []) :- !.
% 3. If the rules above did not match, preserve the head of the
% list in the result list and recurse...
remove_last([X | T], [X | T2]) :-
remove_last(T, T2).
Вы можете (1) обратный список, удалить головку, а затем обратном снова, или (2) использовать 'добавляемых/3' предикат (подсказка: использовать последний элемент списка в виде единого элемента списка для второго аргумента) или (3) напишите простую рекурсию, которая опускает последний элемент, когда вы дойдете до конца (подсказка: базовый пример будет 'remove_last ([_],?)' что бы '?' было?). Вариант 1 здесь был бы наименее эффективным. – lurker
Подумайте, чтобы отменить список перед удалением последнего элемента - хорошая идея. –
Как я уже сказал, вариант 1, вероятно, является наименее желательной идеей. Это просто понять. – lurker