Посчитать сумму элементов списка между N и M - Prolog

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

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

Есть список элементов, в запросе задается Nый и Mтый элементы списка, нужно посчитать сумму элементов списка между N и M элементами. Вот код, но функция sum возвращает false. Help
Листинг программы
  1. %+List, +FirstPos, +SecondPos, +Counter, -Summ
  2. sum([H|T],M,N,I,E):-
  3. I1 is I+1,
  4. I>=M,
  5. E1 is H+E,
  6. sum(T,M,N,I1,E1).
  7. sum([_|T],M,N,I,E):-
  8. I1 is I+1,
  9. I<M,
  10. E=0,
  11. sum(T,M,N,I1,E).
  12. sum([_|T],M,N,I,E):-
  13. I1 is I+1,
  14. I=N,
  15. E=0,
  16. sum(T,M,N,I1,E).
  17. sum([],_,_,_,0):-!.

Решение задачи: «Посчитать сумму элементов списка между N и M»

textual
Листинг программы
  1. %+List, +FirstPos, +SecondPos, +Counter, +Accumulator, -Summ
  2. sum(_, _, N, I, E, E) :-
  3.     I > N,
  4.     !.
  5. sum([H|T], M, N, I, A, E) :-
  6.     I >= M,
  7.     !,
  8.     I1 is I+1,
  9.     A1 = A + H,
  10.     sum(T, M, N, I1, A1, E).
  11. sum([_|T], M, N, I, A, E) :-
  12.     I1 is I+1,
  13.     sum(T, M, N, I1, A, E).
  14. sum([], _, _, _, E, E) :- !.

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

Код выполняет подсчёт суммы элементов списка между N и M (включительно).

  1. Переменная N инициализируется значением первого аргумента.
  2. Переменная M инициализируется значением второго аргумента.
  3. Переменная I инициализируется значением N.
  4. Переменная A инициализируется значением 0.
  5. Переменная E инициализируется значением 0.
  6. Если I больше N, то выводится сообщение об ошибке (это недопустимый список).
  7. Если I меньше или равно M, то происходит следующее:
    1. I1 присваивается значение I+1.
    2. A1 присваивается значение A+H (где H — это первый элемент списка).
    3. Рекурсивный вызов sum/6 происходит для оставшейся части списка (T), с новыми значениями I1, M, N, A1 и E.
    4. Если список пустой, то выводится сообщение об ошибке (это недопустимый список).

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


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

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

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы