Удалить элементы равные последнему и посчитать сумму оставшегося списка - Prolog

Узнай цену своей работы

Формулировка задачи:

Подскажете как добавить рекурсию, так чтобы удалять элементы равные последнему и посчитать сумму оставшегося списка?
Я тут немного не понял задание, нужно подсчитать количество элементов оставшегося списка, а вот моя программа удаляет только первый элемент списка.

Решение задачи: «Удалить элементы равные последнему и посчитать сумму оставшегося списка»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
nondeterm last(intl,int)
nondeterm del(intl,int,intl)
nondeterm dlina(intl,int)
nondeterm task(intl,int)
 
clauses
last([X],X):- !.
last([_|R],X) :-last(R,X).
 
del([],_,[]).
del([X|T],X,R) :- del(T,X,R).
del([Y|T],X,[Y|R]) :- X<>Y, del(T,X,R).
 
dlina([],0).
dlina([H|T],S) :- dlina(T,SS), S=SS+H.
 
task(X,S) :- last(X,L), del(X,L,XX), dlina(XX,S).
goal
X=4, S=[4,1,4,3,4], del(S,X,R),task(X,L),dlina(XX,S).

Объяснение кода листинга программы

В коде присутствуют следующие элементы:

  1. domains - определения типов данных для переменных. В данном случае, int - целочисленный тип данных, intl - указатель на целочисленный тип данных.
  2. predicates - определения функций (предикатов). В данном случае, last - функция для поиска последнего элемента в списке, del - функция для удаления элементов из списка, dlina - функция для подсчета суммы элементов списка, task - функция для выполнения основной задачи.
  3. clauses - определения правил для функций. В данном случае, last([X],X) - правило для функции last, которое означает, что если список пустой или состоит только из одного элемента, то этот элемент является последним. del([],_,[]) - правило для функции del, которое означает, что если список пустой, то после удаления элемента он остается пустым. del([X|T],X,R) - правило для функции del, которое означает, что если в списке есть элементы, то после удаления элемента X, оставшиеся элементы списка T и новый список R остаются неизменными. dlina([],0) - правило для функции dlina, которое означает, что если список пустой, то его сумма равна нулю. dlina([H|T],S) - правило для функции dlina, которое означает, что сумма элементов списка равна сумме элементов оставшегося списка T и значения H.
  4. goal - определение цели задачи. В данном случае, X=4, S=[4,1,4,3,4] - начальные значения переменных, del(S,X,R) - удаление элементов из списка S, task(X,L) - выполнение основной задачи, dlina(XX,S) - подсчет суммы оставшегося списка XX. Таким образом, код выполняет задачу по удалению элементов равных последнему и подсчету суммы оставшегося списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы