Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 29.12.2013
Сообщений: 43

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

24.10.2015, 19:11. Показов 966. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть список элементов, в запросе задается Nый и Mтый элементы списка, нужно посчитать сумму элементов списка между N и M элементами. Вот код, но функция sum возвращает false. Help

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%+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):-!.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2015, 19:11
Ответы с готовыми решениями:

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

Определить сумму элементов списка
Подскажите решение, пожалуйста!

Подсчитать сумму элементов списка
есть задачв подсчитать сумму элементов списка сумма элементов списка, цель - sum_list(),x) domains list=i* i=integer ...

1
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
25.10.2015, 03:07
Вам разобраться?
Тогда сначала прошу сюда
Цитата Сообщение от Black Fregat Посмотреть сообщение
Прежде всего, Вы смешиваете два разных подхода к обработке списков.

Прямой способ: от хвоста к голове. Обработка непустого списка начинается с рекурсивной обработки хвоста, затем голова как-то примешивается к полученному результату. Выход из рекурсии, как правило, на пустом списке, результат для которого задается напрямую, отдельным правилом.
Prolog
1
2
3
4
process([], <некоторая константа>).
process([H|T], R) :-
    process(T, RT),  
    R is <некоторые действия с H и RT>.
Способ с накоплением: от головы к хвосту. Требует использования дополнительного параметра для накопления результата. Этот параметр должен быть каким-то образом установлен в начальное значение (например, в обертывающем предикате). На каждом шаге голова списка как-то примешивается к накопленному значению, а затем рекурсивно обрабатывается хвост уже с новым значением накопителя. Выход из рекурсии, как правило, на пустом списке, при этом результат сопоставляется с накопленным значением.
Prolog
1
2
3
4
5
6
process_envelop(L, R) :-
    process(L, <некоторая константа>, R).
process([], R, R).
process([H|T], R1, R) :-
     R2 is <некоторые действия с H и R1>,
     process(T, R2, R).

Прямой вариант:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
%+List, +FirstPos, +SecondPos, +Counter, -Summ
sum(_, _, N, I, 0) :-
    I > N,
    !.
sum([H|T], M, N, I, E) :-
    I >= M,
    !,
    I1 is I+1,
    sum(T, M, N, I1, E1).
    E is H + E1.
sum([_|T], M, N, I, E) :-
    I1 is I+1,
    sum(T, M, N, I1, E).
sum([], _, _, _, 0) :- !.
Вариант с накоплением:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
%+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) :- !.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2015, 03:07
Помогаю со студенческими работами здесь

Вывести сумму элементов списка с номерами от k до n
Здравствуйте. Есть задача: Вывести сумму элементов списка с номерами от k до n (числа k и n ввести с клавиатуры). Нужно написать...

Подсчитать сумму положительных элементов списка
Выкладываю готовую прогу) sum(, 0). sum(, S):- sum(T, S1), ( H&gt;0, S is S1+H; H&lt;0, S=S1).

Найти сумму нечетных элементов списка.
Помогите решить задачу: Вычисляет сумму sum всех нечетных элементов списка L.

Найти сумму максимального и минимального элементов списка
Список: domains list=i* i=integer predicates sum_list(list,i) clauses sum_list(,0). sum_list(,Max):- max =...

Подсчитать сумму положительных и произведение отрицательных элементов списка
подсчитать сумму положительных и произведение отрицательных элементов списка; хвоствая рекурсия? p(,1):-!. p(,Z):- X&lt;0,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru