Дан список. Убедиться, что сумма эл-ов (чисел), стоящих на четных местах,равна сумме эл-ов,стоящих на нечетных - Prolog

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

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

Сабж в шапке, очень нужна помощь. В решении необходимо использовать рекурсию хвоста списка.

Решение задачи: «Дан список. Убедиться, что сумма эл-ов (чисел), стоящих на четных местах,равна сумме эл-ов,стоящих на нечетных»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
sum_evp_odp(intl,int,int,int)
task(intl)
 
clauses
sum_evp_odp([],0,0,_).
sum_evp_odp([H|T],E,O,N) :- N1=N+1, (N mod 2)=0,  sum_evp_odp(T,E1,O,N1), E=E1+H.
sum_evp_odp([H|T],E,O,N) :- N1=N+1, (N mod 2)<>0, sum_evp_odp(T,E,O1,N1), O=O1+H.
 
task(X) :- sum_evp_odp(X,E,O,0), O=E.
task(X) :- sum_evp_odp(X,E,O,0), O<>E, fail.

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

Код решает задачу на подсчёт суммы элементов списка, стоящих на четных и нечетных позициях. В этом коде:

  1. Создаются четыре предиката: sum_evp_odp, sum_evp_odp, sum_evp_odp, sum_evp_odp
  2. Создается функция task, которая вызывает sum_evp_odp для списка и проверяет результат.
  3. В функции sum_evp_odp рекурсивно вызывается функция sum_evp_odp для списка, начиная с первого элемента.
  4. Если список пустой, то рекурсия заканчивается и возвращается ноль.
  5. Если элемент списка нечетной позиции (N mod 2) не равен нулю, то рекурсия продолжается для списка, начиная с элемента, следующего за текущим.
  6. Если элемент списка четной позиции (N mod 2) равен нулю, то рекурсия продолжается для списка, начиная с элемента, следующего за текущим.
  7. Функция task вызывает sum_evp_odp для списка и проверяет результат.
  8. Если сумма элементов списка, стоящих на четных позициях, равна сумме элементов, стоящих на нечетных позициях, то возвращается ноль.
  9. Если сумма элементов списка, стоящих на четных позициях, не равна сумме элементов, стоящих на нечетных позициях, то возвращается значение, отличное от нуля.

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


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

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

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