Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2014, 13:49   #1
Flashik66
Пользователь
 
Регистрация: 12.04.2014
Сообщений: 11
По умолчанию Сумма элементов списка (Prolog)

Добрый день. Прошу помощи. Уже неделю не могу решить следующую задачу.

Цитата:
Вычислить сумму элементов, стоящих в списке *на нечетных местах, и сумму элементов, стоящих на четных местах
Я уже весь мозг сломал. Все что я смог сделать это вычисление суммы четных и нечетных элементов..Но надо сумма элементов стоящих на четных или нечетных местах.

Вот мой код..Как его переделать??

Код:
domains
number_list=integer*.
P=integer.
K=integer.
predicates
nondeterm par(number_list,P)
nondeterm npar(number_list,K)


Clauses
par([],0).
par([H|T],S):-H mod 2=0,
par(T,SS), S = SS + H;
par(T,S).
npar([],0).
npar([H|T],K):-H mod 2=1,
npar(T,KK), K = KK + H;
npar(T,K).
goal
par([1,6,7,2],S).
Заранее спасибо..

Последний раз редактировалось Flashik66; 12.04.2014 в 13:56.
Flashik66 вне форума Ответить с цитированием
Старый 12.04.2014, 15:13   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
sum([], _, 0):-!.
sum([H|T], I, R):-
  I mod 2 = 0, !, II = I + 1, sum(T, II, TR), R = TR + H;
  II = I + 1, sum(T, II, R).
Примерно так, не проверял. Но суть должна быть понятна.
Это для четных. Для нечетных так:
NOT(I mod 2 = 0)

То, что я на соседнем форуме написал - то был злой умысел (но формально ответ правильный xD). Догадайся задавать вопросы в правильных местах. Будут более адекватные ответы
rrrFer вне форума Ответить с цитированием
Старый 12.04.2014, 15:16   #3
Flashik66
Пользователь
 
Регистрация: 12.04.2014
Сообщений: 11
По умолчанию

Все заработало! Спасибо огромное! Большое спасибо!

Вот код программы. Мб кому-то поможет в будущем!
Код:
domains
number_list=integer*.
I=integer.
R=integer.
predicates
nondeterm sum(number_list,I,R)


Clauses
sum([], _, 0):-!.
sum([H|T], I, R):-
  I mod 2 = 0, !, II = I + 1, sum(T, II, TR), R = TR + H;
  II = I + 1, sum(T, II, R).
goal
sum([1,2,3,4,5,5,7,8],1,R).

Последний раз редактировалось Flashik66; 12.04.2014 в 15:23.
Flashik66 вне форума Ответить с цитированием
Старый 12.04.2014, 15:24   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
domains
list=integer*.

predicates
nondeterm sum(list,integer, integer)

Clauses
sum([], _, 0):-!.
sum([H|T], I, R):-
  I mod 2 = 0, !, II = I + 1, sum(T, II, TR), R = TR + H;
  II = I + 1, sum(T, II, R).
goal
sum([1,2,3,4,5], 0, S).
Примерно так, но ты врешь что неделю пытался разобраться. Это плохо.
Если бы пытался разобраться - ввел бы в гугле "обработка списков в пролог", нашел бы эту статью: http://pro-prof.com/archives/590 , прочитал бы и без труда решил задачу сам.

Ну и уж дописать раздел domains в своем прологе к готовому коду тоже смог бы.
rrrFer вне форума Ответить с цитированием
Старый 27.05.2014, 23:02   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ни с того, ни с сего решил спросить. Нет ли больше проблем с прологом? (но я то знаю, что нет).
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog. Клонирование списка. java_shkiper Помощь студентам 5 13.10.2013 20:57
Сумма вершин дерева на Prolog'е wolf950 Помощь студентам 0 11.02.2013 19:13
Prolog.Сортировка списка KLOP Помощь студентам 3 23.12.2012 22:35
Удалить элементы из списка.PROLOG Mediaplay Помощь студентам 0 11.12.2012 19:43
Удаление из списка. Turbo Prolog Ketty_byyy Помощь студентам 1 23.05.2010 15:19