Посчитать сумму элементов списка между N и M - Prolog
Формулировка задачи:
Есть список элементов, в запросе задается Nый и Mтый элементы списка, нужно посчитать сумму элементов списка между N и M элементами. Вот код, но функция sum возвращает false. Help
Листинг программы
- %+List, +FirstPos, +SecondPos, +Counter, -Summ
- sum([H|T],M,N,I,E):-
- I1 is I+1,
- I>=M,
- E1 is H+E,
- sum(T,M,N,I1,E1).
- sum([_|T],M,N,I,E):-
- I1 is I+1,
- I<M,
- E=0,
- sum(T,M,N,I1,E).
- sum([_|T],M,N,I,E):-
- I1 is I+1,
- I=N,
- E=0,
- sum(T,M,N,I1,E).
- sum([],_,_,_,0):-!.
Решение задачи: «Посчитать сумму элементов списка между N и M»
textual
Листинг программы
- %+List, +FirstPos, +SecondPos, +Counter, +Accumulator, -Summ
- sum(_, _, N, I, E, E) :-
- I > N,
- !.
- sum([H|T], M, N, I, A, E) :-
- I >= M,
- !,
- I1 is I+1,
- A1 = A + H,
- sum(T, M, N, I1, A1, E).
- sum([_|T], M, N, I, A, E) :-
- I1 is I+1,
- sum(T, M, N, I1, A, E).
- sum([], _, _, _, E, E) :- !.
Объяснение кода листинга программы
Код выполняет подсчёт суммы элементов списка между N и M (включительно).
- Переменная N инициализируется значением первого аргумента.
- Переменная M инициализируется значением второго аргумента.
- Переменная I инициализируется значением N.
- Переменная A инициализируется значением 0.
- Переменная E инициализируется значением 0.
- Если I больше N, то выводится сообщение об ошибке (это недопустимый список).
- Если I меньше или равно M, то происходит следующее:
- I1 присваивается значение I+1.
- A1 присваивается значение A+H (где H — это первый элемент списка).
- Рекурсивный вызов sum/6 происходит для оставшейся части списка (T), с новыми значениями I1, M, N, A1 и E.
- Если список пустой, то выводится сообщение об ошибке (это недопустимый список).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д